我的Maven项目有大约七个子模块.其中六个打包为JAR,另一个打包为WAR.
我应该在每个模块中创建单独的logback.xml配置吗?或者我应该有一个所有其他模块所依赖的"通用"模块,并在其中放置一个单独的logback.xml?还有其他选择吗?
谢谢.
我非常喜欢Logback支持登录数据库.但是,我在使用Logback的变量替换功能时遇到了麻烦,更具体地说,是使用了类路径上的属性文件.
我的参考:http://logback.qos.ch/manual/configuration.html#variableSubstitution
所以我有一个多模块Maven项目.在我的web模块(生成.war文件)中,我在以下目录中有我的Logback conf文件:
src/main/reesources
- logback.xml
- local.properties
- dev.properties
Run Code Online (Sandbox Code Playgroud)
我的logback.xml如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property file="${env}.properties"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%X{messageId}] %-5level %logger{0} - %msg%n
</pattern>
</encoder>
</appender>
<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
<dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
<driverClass>${logback.db.driverClassName}</driverClass>
<jdbcUrl>${logback.db.url}</jdbcUrl>
<user>${logback.db.user}</user>
<password>${logback.db.password}</password>
</dataSource>
</connectionSource>
</appender>
<root level="debug">
<appender-ref ref="DB" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
所以当我调出Tomcat服务器时,我会像这样传递$ {env}:
-Denv=local
Run Code Online (Sandbox Code Playgroud)
但是,当我启动服务器时出现以下错误:
17:45:22,782 WARN com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0 DriverManagerDataSource:107 - Could not load driverClass logback.db.driverClassName_IS_UNDEFINED
java.lang.ClassNotFoundException: logback.db.driverClassName_IS_UNDEFINED
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
Run Code Online (Sandbox Code Playgroud)
看起来Logback Joran无法找到属性文件.
任何人都可以让我知道我做错了什么?
我正在阅读如何使用概率数据结构count-min-sketch来查找数据流中的前 k 个元素。但我似乎无法理解我们维护堆以获得最终答案的步骤。
问题:
我们有一个项目流
[B, C, A, B, C, A, C, A, A, ...]。我们被要求找出前 k 个最常出现的项目。
我的理解是,这可以使用微批处理来完成,在微批处理中,我们在开始做一些实际工作之前积累 N 个项目。
hashmap +heap方法对我来说很容易理解。我们遍历微批次并{B:34, D: 65, C: 9, A:84, ...}通过计算元素来构建频率图(例如 )。然后,我们通过遍历频率图来维护大小为 k 的最小堆,根据[item]:[freq]需要向堆添加和从堆中删除。足够简单,没有什么花哨的。
现在使用CMS+heap,而不是哈希图,我们有了这个概率有损二维数组,我们通过遍历微批次来构建它。问题是:给定这个 CMS,我们如何维护大小为 k 的最小堆?
CMS只包含一堆数字,而不是原始项目。除非我还保留微批次中的一组独特元素,否则我无法知道最后需要针对哪些项目构建堆。但如果我这样做,那不是违背了使用CMS节省内存空间的目的吗?
我还考虑过在遍历列表时实时构建堆。随着每个项目的进入,我们可以快速更新 CMS 并获取该项目在该点的累积频率。但这个频率数字是累积的这一事实对我没有多大帮助。例如,通过上面的示例流,我们将得到[B:1, C:1, A:1, B:2, C:2, A:2, C:3, A:3, A:4, ...]. 如果我们使用相同的逻辑来更新我们的最小堆,我们将得到不正确的答案(有重复)。
我肯定在这里遗漏了一些东西。请帮助我理解。
real-time frequency distributed-computing stream count-min-sketch
我们的项目有[Hibernate + c3p0 + MySQL]配置.我们遇到以下异常:
com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.
at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1319) ~[c3p0-0.9.1.2.jar:0.9.1.2]
at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557) ~[c3p0-0.9.1.2.jar:0.9.1.2]
at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477) ~[c3p0-0.9.1.2.jar:0.9.1.2]
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525) ~[c3p0-0.9.1.2.jar:0.9.1.2]
Wrapped by: java.sql.SQLException: Connections could not be acquired from the underlying database!
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106) ~[c3p0-0.9.1.2.jar:0.9.1.2]
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:529) ~[c3p0-0.9.1.2.jar:0.9.1.2]
at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128) ~[c3p0-0.9.1.2.jar:0.9.1.2]
at org.hibernate.service.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:141) ~[hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:276) ~[hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:297) ~[hibernate-core-4.0.1.Final.jar:4.0.1.Final]
Wrapped by: org.hibernate.exception.GenericJDBCException: Could not open connection
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:52) ~[hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) ~[hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) ~[hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:304) ~[hibernate-core-4.0.1.Final.jar:4.0.1.Final] …Run Code Online (Sandbox Code Playgroud) 我有一个使用Spring IoC的多模块Maven项目,类似于
parent-proj
- module1
- module2
- module3
- web-module
Run Code Online (Sandbox Code Playgroud)
我的问题是:
组装applicationContext文件的最佳实践是什么?我应该在Web模块中创建一个巨大的applicationContext-web.xml吗?或者我应该在每个子模块中创建applicationContext-module <#>.xml,并在我的applicationContext-web.xml中导入所有这些模块?
我一直在使用第二个选项.现在它看起来有点失控(例如bean覆盖具有相同id的bean等).
谢谢.
我需要一些关于SLF4J日志记录的建议.
目前,我们正在使用SLF4J日志记录(log4j绑定)作为我们的Java Web应用程序,它使用简单的ConsoleAppender.我们的下一步是研究可以保存日志的地方.
我们的应用每天处理大约100,000封邮件.每条消息生成大约60-100行日志.我们的目标是能够快速搜索和查找失败的消息(使用messageId)并确定失败的原因.
我的问题是:以下哪个是存储日志的好地方:
谢谢.
我正在尝试创建一个Handler接口,它能够根据事件的类型处理不同类型的事件。我遇到以下警告问题:
Unchecked call to 'handle(T)' as a member of raw type 'Handler'
这是我的课程。
public interface Handler<T> {
void handle(T event); }
public class IntegerHandler implements Handler<Integer> {
@Override
public void handle(Integer event) {
System.out.println("Integer: " + event);
}
}
public class ObjectHandler implements Handler<Object> {
@Override
public void handle(Object event) {
System.out.println("Object: " + event);
}
}
public class StringHandler implements Handler<String> {
@Override
public void handle(String event) {
System.out.println("String: " + event);
}
}
public class TestHandlers …Run Code Online (Sandbox Code Playgroud) 我想知道我是否可以为一个DB运行多个c3p0数据源,例如:
<bean id="dataSource1" class = "com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${db.driverClassName}"/>
<property name="jdbcUrl" value="${db.url}/schema1"/>
<property name="user" value="${db.username}"/>
<property name="password" value="${db.password}"/>
<property name="acquireIncrement" value="1" />
<property name="idleConnectionTestPeriod" value="100"/>
<property name="minPoolSize" value="5" />
<property name="maxPoolSize" value="50" />
<property name="maxIdleTime" value="1800" />
</bean>
<bean id="dataSource2" class = "com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${db.driverClassName}"/>
<property name="jdbcUrl" value="${db.url}/schema2"/>
<property name="user" value="${db.username}"/>
<property name="password" value="${db.password}"/>
<property name="acquireIncrement" value="1" />
<property name="idleConnectionTestPeriod" value="100"/>
<property name="minPoolSize" value="5" />
<property name="maxPoolSize" value="50" />
<property name="maxIdleTime" value="1800" />
</bean>
Run Code Online (Sandbox Code Playgroud)
它们将由差异持久性服务使用.
谢谢.
我需要将max运算符应用于以下列表
[Tier20 Tier10 Tier30]
Run Code Online (Sandbox Code Playgroud)
它应该给我
Tier30
Run Code Online (Sandbox Code Playgroud)
预定义的有序列表(从低到高)是
[Tier5 Tier10 Tier20 Tier30 Tier40 Tier50]
Run Code Online (Sandbox Code Playgroud)
在Clojure中实现这一目标的最佳方法是什么?