我必须创建测试战争和生产战争,它将log4j.properties在WEB-INF目录中有一个不同的文件.我有这些文件log4j.properties(测试战争)和dev.log4j.properties(生产enivorment).
如何将dev.log4j.properties文件复制到log4j.properties文件中进行生产战争?
例如,这是来自Tomcat服务器的堆栈跟踪:
"RMI TCP Accept-0" daemon prio=10 tid=0x091a5800 nid=0x8f1 runnable [0x8b305000]
java.lang.Thread.State: RUNNABLE
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:408)
- locked <0x911d3c30> (a java.net.SocksSocketImpl)
at java.net.ServerSocket.implAccept(ServerSocket.java:462)
at java.net.ServerSocket.accept(ServerSocket.java:430)
at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(LocalRMIServerSocketFactory.java:34)
at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:369)
at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:341)
at java.lang.Thread.run(Thread.java:662)
Run Code Online (Sandbox Code Playgroud)
我的猜测是"锁定"意味着CPU正在等待某种锁定.但是,如果是这种情况,为什么线程的状态列为RUNNABLE而不是BLOCKED?
谢谢.
必须将Lambda表达式强制转换为功能接口.据我所知,他们无法扩展课程,但我想知道是否有办法获得类似的东西.
我有java.nio.file.SimpleFileVisitor<Path>基类,我想覆盖它的方法,但我希望在另一个方法中这样做.我可以用匿名类这样做:
public static void printContent(Path path) throws IOException {
FileVisitor<Path> visitor = new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
throws IOException {
System.out.println(file);
return super.visitFile(file, attrs);
}
};
Files.walkFileTree(path, visitor);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在lambda的帮助下删除那些代码?
我认为lambda会是 (f) -> System.out.println(f);
我想忘记SimpleFileVisitor并使用默认方法创建一个等效的接口但是,我怎么能选择要覆盖的方法呢?我是否需要在没有默认实现的情况下保留我想覆盖的方法?在这种情况下,对于具有不同未实现方法的不同情况,我将需要几个接口.
谢谢.
我想使用静态方法作为setter helper来捕获异常并打印有关失败操作的调试信息.我不希望只有例外细节.我想显示正在设置的属性,以便详细帮助快速调试问题.我正在使用Java 8.
我应该如何提供或检测所设置的财产?
我希望删除示例中的"名称"字符串并获得相同的结果.
我知道我不能对提供的提供的setter方法使用反射,该方法转换为lambda表达式然后转换为BiConsumer.
我得到了这个,但需要提供属性名称.
/** setter helper method **/
private static <E, V> void set(E o, BiConsumer<E, V> setter,
Supplier<V> valueSupplier, String propertyName) {
try {
setter.accept(o, valueSupplier.get());
} catch (RuntimeException e) {
throw new RuntimeException("Failed to set the value of " + propertyName, e);
}
}
Run Code Online (Sandbox Code Playgroud)
例:
Person p = new Person();
Supplier<String> nameSupplier1 = () -> "MyName";
Supplier<String> nameSupplier2 = () -> { throw new RuntimeException(); };
set(p, Person::setName, nameSupplier1, "name");
System.out.println(p.getName()); // prints MyName …Run Code Online (Sandbox Code Playgroud) 我不希望有一个正常的lambda实现一个方法,并重新定义它的toString作为一个附加值.我希望lambda表达式只实现toString方法.我知道我的表达不是很好,但我相信你会用这个例子来理解我.
public class LambdaToStringTest {
public interface ToStringInterface {
public abstract String toString();
}
public static void main(String[] args) {
print("TRACE: %s", (ToStringInterface)()->someComputation()); // <<-- ERROR: The target type of this expression must be a functional interface
}
private static void print(String format, Object... args) {
System.out.println(String.format(format, args));
}
}
Run Code Online (Sandbox Code Playgroud)
如果我更改方法的名称但它不会覆盖toString,则编译,因此print方法不会打印预期的内容.
这是尝试定义一个日志子系统,该子系统仅在需要时(当它真的要打印时)评估lambda,但与非lambda参数兼容.我知道其他方法来实现它,但我想知道为什么我不能这样做,如果有一个解决方法或我做错了什么,
第一个回调电话很快,其余的延迟~50ms(非加法),我不知道为什么.
public class CfTest {
final static long t0 = System.nanoTime();
public static void main(String[] args) {
CompletableFuture<Integer> cf1 = CompletableFuture.supplyAsync(()->{sleep(2000); return 100;});
CompletableFuture<Long> cf2 = CompletableFuture.supplyAsync(()->{sleep(1000); return 1L;});
CompletableFuture<Long> cfs = cf1.thenCombine(cf2, (a,b)->a+b);
cfs.thenAccept(x->debug("a1. " + x)); // Async process, sync when complete
cfs.thenAccept(x->debug("a2. " + x)); // Async process, sync when complete
cfs.thenAcceptAsync(x->debug("a3. " + x)); // Async process, async after complete too
debug("b. " + cfs.join()); // Wait and process
debug("c. " + cfs.join()); // Wait and …Run Code Online (Sandbox Code Playgroud) 无限制拆分会拆分整个字符串,但如果设置了限制,它会向左分割到该限制.我怎么能在右边这样做呢?
"a.b.c".split("[.]", 2); // returns ["a", "b.c"]
Run Code Online (Sandbox Code Playgroud)
我想要
"a.b.c".splitRight("[.]", 2); // to return ["a.b", "c"]
Run Code Online (Sandbox Code Playgroud)
编辑:我想要一个通用的解决方案,就像分裂但反转,所以我添加一个更复杂的例子
我想要
"a(->)b(->)c(->)d".splitRight("\\(->\\)", 3); // to return ["a(->)b", "c", "d"]
Run Code Online (Sandbox Code Playgroud) 我对将字符串解析为Double时遇到的这种特殊"错误"感到困惑.
我已经设置了NumberFormat属性和符号.
传递带有15位和2位小数的字符串(例如str = "333333333333333,33")并使用Number num = NumberFormat.parse(str)结果解析它时省略数字.
num的实际值是3.333333333333333E14.
它似乎与Strings一起使用所有1,2和4但是......
谁能开导我?
干杯恩里科
当我写"new Triangle();"时,我得到这个错误"没有封闭的oppgave1类型的实例可访问".我需要帮助来解释一下我做错了什么(关于三角类).我是java的新开始.谢谢你的进步.
public static void main(String[] args) {
Triangle T1 = new Triangle(1, 1, 1, "green", false);
Scanner input = new Scanner(System.in);
System.out.println("Enter three sides of the triangle: ");
double side1 = input.nextInt();
double side2 = input.nextInt();
double side3 = input.nextInt();
System.out.println("Enter a color: ");
String color = input.nextLine();
System.out.println("Enter true or false (to indicate triangle is filled or no): ");
String isFilled = input.nextLine();
}
public class GeometricObject {
//Data fields
private String color = "blue";
private boolean filled; …Run Code Online (Sandbox Code Playgroud)