标签: apache-commons

在java日志框架场景中找到一种方法

Java有很多框架/ API可以帮助您登录应用程序:

  1. Java API具有java.util.logging包.
  2. Apache的Log4j.
  3. Apache的Commons Logging.
  4. SLF4J(伐木门面).
  5. JLO.还有更多......

我一直使用log4j库,我发现它大部分时间都足够了,并且当我需要更多控制时可扩展.

任何有过多个框架经验的人都可以分享他的经历吗?从应用程序架构的角度来看,何时更好地使用一个框架而不是另一个框架?为什么我更喜欢一个?

谢谢

java logging log4j apache-commons

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

什么是日志记录,Apache Commons日志记录是如何使用的?

Web应用程序服务器希望记录哪些信息,以及为什么?

据我所知

org.apache.commons.logging.Log
Run Code Online (Sandbox Code Playgroud)

是一个抽象其他Logging类提供的功能的接口,同样适用于接口LogFactory.

我想了解的代码有 -

Log auditLogger = LogFactory.getLog(someString);
Run Code Online (Sandbox Code Playgroud)

String someString如何用于标识要生成的LogFactory?如何查看正在使用的Log和LogFactory类的实现?

java logging interface apache-commons apache-commons-logging

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

BidiMap 同步

使用apache commonds bidimap时,如何处理同步。例如,如果我创建如下所示的地图

BidiMap oneWay = new DualHashBidiMap();
BidiMap theOtherWay = oneWay.inverseBidiMap();

因此,如果我要向上述变量之一添加/访问/删除键/值对,我需要同步两者(线程同步)。如果我需要这样做,似乎我不会通过使用 2 张地图实现此功能而获得任何好处。

感谢您花时间查看此问题。

java synchronization bidirectional apache-commons

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

org.apache.commons.fileupload.disk.DiskFileItem创建不正确?

我正在尝试使用以下示例中显示的代码:

创建DiskFileItem时出现java.lang.NullPointerException

我的Test方法包含以下代码:

final File TEST_FILE = new File("C:/my_text.txt");
final DiskFileItem diskFileItem = new DiskFileItem("fileData", "text/plain", true, TEST_FILE.getName(), 100000000, TEST_FILE.getParentFile());
diskFileItem.getOutputStream();

System.out.println("diskFileItem.getString() = " + diskFileItem.getString());
Run Code Online (Sandbox Code Playgroud)

文本文件存在于此位置,但上述代码中的最后一行不输出文件内容.

知道为什么吗?

NB

以下是打印文件内容:

BufferedReader input =  new BufferedReader(new FileReader(TEST_FILE));
String line = null;
while (( line = input.readLine()) != null){
    System.out.println(line);
}
Run Code Online (Sandbox Code Playgroud)

java junit spring spring-mvc apache-commons

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

如何区分Sorted集合中的两个equals对象?

我可能错了,但对我来说,我们可以为一个对象重写equals,以便你认为它们有意义地等于.映射中的所有条目都具有不同的键,并且集合中的所有条目都具有不同的值(不是有意义的等于)

但是在使用TreeMap或TreeSet时,您可以提供比较器.我注意到,当提供比较器时,绕过对象的equals方法,并且当比较器返回0时,两个objets被认为是等于.因此,我们有2个对象但是在map keyset或set中,只保留一个.

我想知道是否有可能使用已排序的集合来区分两个不同的实例.

这是一个简单的示例:

public static void main(String[] args) {
    TreeSet<String> set = new TreeSet<String>();
    String s1 = new String("toto");
    String s2 = new String("toto");
    System.out.println(s1 == s2);
    set.add(s1);
    set.add(s2);
    System.out.println(set.size());
}
Run Code Online (Sandbox Code Playgroud)

请注意,使用新的String("xxx")会绕过String池的使用,因此s1!= s2.我想知道如何实现比较器,使设置大小为2而不是1.

主要问题是:对于相同String值的两个不同实例,我如何在比较器中返回一些东西!= 0?

请注意,我希望比较器遵守规则:

比较它的两个参数的顺序.返回负整数,零或正整数,因为第一个参数小于,等于或大于第二个参数.实现者必须确保所有x和y的sgn(compare(x,y))== -sgn(compare(y,x)).(这意味着当且仅当compare(y,x)抛出异常时,compare(x,y)必须抛出异常.)

实现者还必须确保关系是传递的:((compare(x,y)> 0)&&(compare(y,z)> 0))表示compare(x,z)> 0.

最后,实现者必须确保compare(x,y)== 0意味着所有z的sgn(compare(x,z))== sgn(compare(y,z)).

通常情况是这样,但并非严格要求(compare(x,y)== 0)==(x.equals(y)).一般来说,任何违反此条件的比较器都应清楚地表明这一事实.推荐的语言是"注意:这个比较器强加了与equals不一致的排序."

我可以用一个技巧:

public int compare(String s1,String s2) {
  if s1.equals(s2) { return -1 }
  ...
}
Run Code Online (Sandbox Code Playgroud)

它似乎工作正常,但自从比较(s1,s2)后规则不受尊重!= -compare(s2,s1)

那么这个问题有什么优雅的解决方案吗?


编辑:对于那些想知道为什么我问这样的事情的人.好奇心比任何现实生活中的问题更重要.

但我已经处于这样的情况,虽然有关此问题的解决方案:

想象一下你有:

class Label {
  String label;
}
Run Code Online (Sandbox Code Playgroud)

对于每个标签,您都有一个关联的String值.现在如果你想要一个map,label-> value怎么办?但是现在如果你希望能够拥有两个与地图键相同的标签呢?Ex"label"(ref1) - > …

java apache-commons guava

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

Apache Commons VFS Maven存储库?

有什么想法使用哪个Maven存储库来使用Apache公共VFS库?谢谢.

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-vfs2</artifactId>
        <version>2.1-SNAPSHOT</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

**编辑**:以下存储库工作正常:

    <repository>
        <id>commons-vfs</id>
        <name>Apache Commons VFS Repository Group</name>
        <url>https://repository.apache.org/content/groups/snapshots/</url>
        <layout>default</layout>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
Run Code Online (Sandbox Code Playgroud)

repository apache-commons vfs maven

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

Apache Mailer在Scala中抛出编译器错误?

创建了一个简单的Apache Commons Email对象并进行编译.已导入:import org.apache.commons.mail._并且javax.mail.internet.MimeMessage还执行了以下操作:

  def sendVerification(user: User) = {
    val email = new SimpleEmail()
        email.setHostName("smtp.sendgrid.net")
        email.setSmtpPort(465)
        email.setAuthenticator(new DefaultAuthenticator("user", "pass"))
        email.setSSLOnConnect(true)
        email.setFrom("Community Admin <admin@domain.com>")
        email.setSubject("TestMail")
        email.setMsg("""Welcome %s!

        Thanks for signing up. This email is to confirm your email address.

        Cheers,
        Admin Team
        """ format user.firstName)
        email.addTo(user.email)
        email.send()
  }
Run Code Online (Sandbox Code Playgroud)

错误如下:

[error] C:\Users\path\to\AccountService\models\User.scala:43: object mail is not a member of package javax
[error] import javax.mail.internet.MimeMessage
[error]              ^
[error] error while loading Email, Missing dependency 'class javax.mail.internet.MimeMessage', required by C:\Users\path\lib\commons-email-1.2.jar(org/apache/commons/mail/Email.class) …
Run Code Online (Sandbox Code Playgroud)

java scala apache-commons

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

如何为apache commons daemon(Procrun)禁用日志记录stdout?

我正在使用apache commons daemon工具Procrun将java命令行工具安装为Windows服务.

java工具在运行期间在控制台上显示大量内容.守护进程工具会自动将任何sysout记录到日志文件中.只要服务正在运行,就无法删除此文件.

问题:我的服务和应用程序几乎不应该重新启动.这导致StdOutput每月几百GB 的守护程序日志文件,我只能通过先停止应用程序来手动清除.

问题:是否可以禁用此服务日志记录?

java apache-commons procrun

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

如何使用 FastDateFormat 以 UTC 格式格式化时间?

这是一个简单的单元测试来说明我遇到的问题。

package mytest;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

import org.apache.commons.lang3.time.FastDateFormat;
import org.junit.Test;

import static org.junit.Assert.*;

public class DateTests {

    private static final String DATE_VALUE = "2016-03-11T15:47:02.123Z";
    private static final String PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";

    @Test
    public void utcTest() throws ParseException {

        SimpleDateFormat sdf = new SimpleDateFormat(PATTERN);
        sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
        Date date = sdf.parse(DATE_VALUE)

        FastDateFormat fdf = FastDateFormat.getInstance(PATTERN);
        assertEquals(DATE_VALUE, fdf.format(date));
    }
}
Run Code Online (Sandbox Code Playgroud)

我的计算机处于中部时间,这意味着当我运行此代码时,断言失败,因为fdf将日期格式化为上午 9 点而不是下午 3 点。我怎么能告诉它在 UTC 中格式化东西呢?

java date apache-commons simpledateformat

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

JedisPoolConfig 参数的使用 *blockWhenExhausted*

所以我有一个项目,我使用Spring-Data-Redis来缓存一些数据。该Spring-Data-Redis是用bean的配置设置与Jedis。

我寻找JedisPoolConfig可以修改的参数来控制我的缓存和应用程序的行为。

我想知道属性的用途,blockWhenExhausted,它是可配置属性的一部分。据说默认值是true,这个默认值会调用什么行为?如果将该值更改为false,这将带来什么行为?

java apache-commons redis jedis spring-data-redis

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