小编sca*_*age的帖子

如何在多模块Maven项目中配置slf4j + logback?

我的Maven项目有大约七个子模块.其中六个打包为JAR,另一个打包为WAR.

我应该在每个模块中创建单独的logback.xml配置吗?或者我应该有一个所有其他模块所依赖的"通用"模块,并在其中放置一个单独的logback.xml?还有其他选择吗?

谢谢.

java config slf4j maven multi-module

13
推荐指数
1
解决办法
5731
查看次数

回滚变量替换无法在类路径上找到属性文件

我非常喜欢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无法找到属性文件.

任何人都可以让我知道我做错了什么?

java logging logback maven

13
推荐指数
1
解决办法
1万
查看次数

如何从 count-min-sketch 中获取前 K 个元素?

我正在阅读如何使用概率数据结构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

12
推荐指数
1
解决办法
2467
查看次数

c3p0 getConnection()抛出异常:ResourcePool无法从其主工厂或源获取资源

我们的项目有[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)

java mysql connection-pooling jdbc c3p0

10
推荐指数
1
解决办法
1万
查看次数

您应该如何为多模块Spring Maven项目组织applicationContext文件?

我有一个使用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等).

谢谢.

spring web-services inversion-of-control maven

9
推荐指数
2
解决办法
5813
查看次数

SLF4J记录到文件与DB与Solr

我需要一些关于SLF4J日志记录的建议.

目前,我们正在使用SLF4J日志记录(log4j绑定)作为我们的Java Web应用程序,它使用简单的ConsoleAppender.我们的下一步是研究可以保存日志的地方.

我们的应用每天处理大约100,000封邮件.每条消息生成大约60-100行日志.我们的目标是能够快速搜索和查找失败的消息(使用messageId)并确定失败的原因.

我的问题是:以下哪个是存储日志的好地方:

  • 文件(S)
  • D B
  • Solr的

谢谢.

java logging solr log4j slf4j

6
推荐指数
1
解决办法
3921
查看次数

Java 对原始类型的未经检查的调用

我正在尝试创建一个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)

java generics

5
推荐指数
1
解决办法
2355
查看次数

我可以为数据库实例使用多个C3P0数据源吗?

我想知道我是否可以为一个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)

它们将由差异持久性服务使用.

谢谢.

spring datasource connection-pooling jdbc c3p0

3
推荐指数
1
解决办法
2113
查看次数

如何在Clojure中将max应用于具有预定义顺序的值列表?

我需要将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中实现这一目标的最佳方法是什么?

clojure

3
推荐指数
1
解决办法
170
查看次数