我在我的log4j.properties文件中添加了一个数据库附加程序:
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DB.URL=jdbc:mysql://${db.url}/mydb
log4j.appender.DB.driver=com.mysql.jdbc.Driver
log4j.appender.DB.user=user
log4j.appender.DB.password=password
log4j.appender.DB.sql=INSERT INTO logs (Date, Logger, Priority, Message) VALUES ('%d', '%c', '%p', '%m')
log4j.appender.DB.layout=org.apache.log4j.PatternLayout
log4j.appender.DB.threshold=INFO
Run Code Online (Sandbox Code Playgroud)
这是我的表格的样子:
CREATE TABLE `logs` (
`Id` bigint(20) NOT NULL AUTO_INCREMENT,
`Date` varchar(30) NOT NULL,
`Logger` varchar(128) NOT NULL,
`Priority` varchar(10) NOT NULL,
`Message` varchar(4096) NOT NULL,
PRIMARY KEY (`Id`)
Run Code Online (Sandbox Code Playgroud)
部署应用程序后,启动tomcat时,我看到以下异常:
log4j:ERROR Failed to excute sql
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use …Run Code Online (Sandbox Code Playgroud) 在高容量多线程java项目中,我需要实现一个非阻塞缓冲区.
在我的场景中,我有一个每秒接收约20,000个请求的Web层.我需要在某些数据结构(也就是所需的缓冲区)中累积其中一些请求,当它满了时(让我们假设它在包含1000个对象时已满)这些对象应该被序列化为一个文件,该文件将被发送到另一个服务器进一步处理.
实施应该是一个非阻塞的实施.我检查了ConcurrentLinkedQueue,但我不确定它是否适合这项工作.
我认为我需要使用2个队列,一旦第一个被填充,它将被一个新队列替换,并且完整队列("第一个")被交付以进行进一步处理.这是我现在想到的基本想法,但我仍然不知道它是否可行,因为我不确定我是否可以在java中切换指针(为了切换完整队列).
有什么建议?
谢谢
我创建了一个 spring boot 应用程序,并希望在heroku上运行它。我的应用程序是使用 java 9 编译的。
当我使用CLI 插件将它部署到 heroku 时,我得到了
Exception in thread "main" java.lang.UnsupportedClassVersionError: io/safeblocks/firewall/FirewallApplication has been compiled by a more recent version of the Java Runtime (class file version 53.0), this version of the Java Runtime only recognizes class file versions up to 52.0
Run Code Online (Sandbox Code Playgroud)
显然,这意味着 Java 版本不匹配。我按照说明将system.properties文件添加到我的资源文件夹中java.runtime.version=9 但仍然出现相同的错误。
当我运行命令时,heroku run java -version --app myApp 我得到:
openjdk version "1.8.0_171-heroku"
OpenJDK Runtime Environment (build 1.8.0_171-heroku-b11)
OpenJDK 64-Bit Server VM …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 guava AbstractScheduledService定期执行某些任务:
public class MyService extends AbstractScheduledService {
public MyService() {
}
@Override
protected void runOneIteration() {
doStuff();
}
private void doStuff() {
// Do stuff
}
@Override
protected Scheduler scheduler() {
return Scheduler.newFixedRateSchedule(0, 8, TimeUnit.HOURS);
}
}
Run Code Online (Sandbox Code Playgroud)
因此该服务应该每 8 小时定期执行一些任务,但实际上从未执行过。继承的isRunning()方法返回 false 并且该runOneIteration()方法永远不会被调用。
我已经设法通过从服务构造函数调用该方法(从父类继承)来使其工作startAsync(),但我没有看到任何引用说这是它应该工作的方式。
我在这里错过了什么吗?这是工作方式吗AbstractScheduledService?
我在 Tomcat 上运行了一个简单的 java Web 应用程序,我想使用Prometheus对其进行监控。我使用官方客户端向我的 java 应用程序添加了一些计数器和仪表,我在另一台服务器上安装了 Prometheus,并且不想使用 Prometheus 从我的 java 应用程序中提取指标。
普罗米修斯有大量的出口商,但我不清楚哪一个适合我的用例。我考虑过使用Prometheus 推送网关,但根据文档,Pushgateway 的唯一有效用例是捕获服务级批处理作业的结果,这不是我的情况。我应该怎么做才能从我的 java 应用程序中提取指标?
我正在使用Glassfish应用服务器开发一个Web应用程序.我已经安装了H2 DB,现在尝试在glassfish中定义连接池,但在尝试ping数据库时它失败了.
这是我做的:
我在我的pom.xml中添加了一个H2 maven依赖项:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.3.166</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)我的"附加属性"是:
当我尝试ping此连接时,它失败并显示以下消息:
myCpool的Ping连接池失败.类名错误或类路径未设置为:org.h2.jdbcx.JdbcDataSource请查看server.log以获取更多详细信息.
完整的日志说:
Wrong class name or classpath for Datasource Object java.lang.ClassNotFoundException: org.h2.jdbcx.JdbcDataSource at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:423) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at com.sun.gjc.common.DataSourceObjectBuilder.getDataSourceObject(DataSourceObjectBuilder.java:285) at com.sun.gjc.common.DataSourceObjectBuilder.constructDataSourceObject(DataSourceObjectBuilder.java:114) at com.sun.gjc.spi.ManagedConnectionFactory.getDataSource(ManagedConnectionFactory.java:1307) at com.sun.gjc.spi.DSManagedConnectionFactory.getDataSource(DSManagedConnectionFactory.java:163) at com.sun.gjc.spi.DSManagedConnectionFactory.createManagedConnection(DSManagedConnectionFactory.java:102) at com.sun.enterprise.connectors.service.ConnectorConnectionPoolAdminServiceImpl.getUnpooledConnection(ConnectorConnectionPoolAdminServiceImpl.java:697) at com.sun.enterprise.connectors.service.ConnectorConnectionPoolAdminServiceImpl.testConnectionPool(ConnectorConnectionPoolAdminServiceImpl.java:426) at com.sun.enterprise.connectors.ConnectorRuntime.pingConnectionPool(ConnectorRuntime.java:1086) at …
我创建了一个基本的Spring 3.1 - Hibernate 4 - 在Tomcat 7上运行的Mysql 5.5 Web应用程序.我通过spring + C3PO汇集了连接.
更新:我也发布了我的代码.
My Spring应用程序上下文:
<!-- Context -->
<context:component-scan base-package="com.yl.tomcat" />
<!-- AOP -->
<aop:aspectj-autoproxy />
<!-- Properties -->
<bean id="applicationProperties"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:applicationProperties.properties" />
</bean>
<!-- Data source -->
<!-- Have spring manage connection management along with connection pooling -->
<bean id="dataSourceGlobal" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="${driverClass}" />
<property name="jdbcUrl" value="${jdbcUrl" />
<property name="user" value="${user}" />
<property name="password" value="${password}" />
<!-- C3P0 Connection pool properties -->
<property name="minPoolSize" …Run Code Online (Sandbox Code Playgroud) 我使用的是Spring MVC 3.1,它默认使用Jackson进行JSON-Java转换.
我需要为以下内容创建自定义转化:
我遇到了一些创建自定义转换器的不同方法:
如上所述这里或多或少,创建自定义ObjectMapper:
公共类CustomObjectMapper扩展了ObjectMapper ...
然后将MappingJacksonHttpMessageConverter添加到我的servlet-context并使用我的自定义ObjectMapper注册它:
然后我想我需要在我的自定义objectMapper中有一些特定的实现(它应该如何?).
更新1:我看到另一种方法是subcalss MappingJacksonHttpMessageConverter并重写getJavaType方法,如所描述这里.为此,我必须将我的自定义转换器添加到转换器列表:
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="com.yl.app.CustomMappingJacksonHttpMessageConverter">
</list>
</property>
Run Code Online (Sandbox Code Playgroud)
推荐哪种方法?这些是唯一的,有更好的方法吗?
更新2:
我还是不明白.在实践中,假设我有A级和B级.
A类包含B的列表:
public class A {
public List<B> list;
}
Run Code Online (Sandbox Code Playgroud)
我想将A类型的对象返回给我的客户端.除了添加@ResponseBody注释之外,我应该在我的服务器中做什么(就我而言,在这种情况下还不够)?
我正在尝试使用Intellij上的可靠性编写一个基本的智能合约.我安装了Intellij.我已经安装了intellij-solidity插件并启动了Intellij - >创建新项目.我希望看到一个与可靠性相关但却看不到的选项.
如何开始在Intellij上使用Solidity?
java ×3
spring ×2
apache-kafka ×1
buffer ×1
c3p0 ×1
compression ×1
glassfish-3 ×1
guava ×1
h2 ×1
heroku ×1
hibernate ×1
jackson ×1
java-9 ×1
jdbc ×1
json ×1
log4j ×1
monitoring ×1
prometheus ×1
solidity ×1
spring-boot ×1
spring-mvc ×1
sql ×1
tomcat7 ×1