小编Cob*_*117的帖子

使用Transactional进行Spring重试

Spring Retry是否可以保证与Spring的@Transactional注释一起使用?

具体来说,我正在尝试使用@Retryable乐观锁定.似乎它将依赖于创建的AOP代理的顺序.例如,如果调用如下所示:

调用代码 - >重试代理 - >事务代理 - >实际数据库代码

然后它将正常工作,但如果代理结构如下:

调用代码 - >事务代理 - >重试代理 - >实际数据库代码

然后重试将不起作用,因为关闭事务的行为是抛出optmistic锁定异常的行为.

在测试中,它似乎生成了第一个案例(重试,然后交易),但我不知道这是保证行为还是幸运.

java spring spring-data spring-retry

10
推荐指数
3
解决办法
4276
查看次数

在Java 9+中启动jstatd

在过去,我已经通过安全策略文件启动了jstatd,如下所示:https: //stackoverflow.com/a/14930180/1294116

但是,在Java 9+中,他们已经删除了该tools.jar文件,这意味着此解决方案不再有效.有谁知道怎么解决这个问题?(目前我回来收到错误java.security.AccessControlException: access denied ("java.util.PropertyPermission" "java.rmi.server.ignoreSubClasses" "write") ...)

java jstatd java-9

9
推荐指数
1
解决办法
767
查看次数

检测RefreshScope bean的刷新

我的理解是,当您使用Spring Cloud的RefreshScope注释时,会注入数据的代理,如果更改了支持信息,代理会自动更新.不幸的是,我需要找到一种方法,以便在刷新时发出警报,以便我的代码可以重新读取刷新范围的bean中的数据.

简单示例:计划任务,其计划存储在Cloud Config中.除非你等到下一次执行任务(可能需要一段时间)或定期轮询配置(这看起来很浪费),否则无法知道配置是否已更改.

java spring spring-boot spring-cloud

7
推荐指数
2
解决办法
5357
查看次数

在Java中查找调用Method

简短版本:我需要在Java中找到一种方法来定位Method调用堆栈中的前一个(注意方法中的大写'M' - 我需要实际的java.lang.reflect.Method对象).

背景:我正在研究Google Guava Preconditions.checkNotNull(...)概念的扩展,它允许程序员同时检查所有参数是否为null,并根据调用方法的参数名称构造NPE.例如:

public class MyClass
{
    public void myMethod(Object arg1, Integer arg2, String arg3)
    {
        MyPreconditions.checkAllNotNull(arg1, arg2, arg3);
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,如果第一个参数为null,那么NPE可能会读取 arg1 cannot be null (MyClass:myMethod(Object, Integer, String)

我已经解决了如何获得调用Class,我可以通过Spring LocalVariableTableParameterNameDiscoverer(或通过Paranamer库)得到参数名称Method.我无法弄清楚的唯一部分是如何获得Method自己.

我知道您可以使用堆栈跟踪来获取方法名称,但如果重写该方法,则无效.有没有办法(即使是内部的com.sun类)来获得实际的堆栈?或者,我可以获取调用方法的行号,那么有没有办法找到MethodClass对象中检索的a的行号?

java reflection

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

以编程方式更改 Spring Boot 属性

我正在尝试为使用@RefreshScope. 我想添加一个实际更改属性并断言应用程序正确响应的测试。我已经想出了如何触发刷新(自动装配RefreshScope和调用refresh(...)),但我还没有想出修改属性的方法。如果可能,我想直接写入属性源(而不是必须处理文件),但我不确定在哪里查看。

更新

这是我正在寻找的示例:

public class SomeClassWithAProperty {
    @Value{"my.property"}
    private String myProperty;

    public String getMyProperty() { ... }
}

public class SomeOtherBean {
    public SomeOtherBean(SomeClassWithAProperty classWithProp) { ... }

    public String getGreeting() {
        return "Hello " + classWithProp.getMyProperty() + "!";
    }
}

@Configuration
public class ConfigClass {
    @Bean
    @RefreshScope
    SomeClassWithAProperty someClassWithAProperty() { ...}

    @Bean
    SomeOtherBean someOtherBean() {
        return new SomeOtherBean(someClassWithAProperty());
    }
}

public class MyAppIT {
    private static final DEFAULT_MY_PROP_VALUE = "World";

    @Autowired
    public …
Run Code Online (Sandbox Code Playgroud)

java spring spring-cloud

2
推荐指数
1
解决办法
9015
查看次数