小编pab*_*blo的帖子

将 Spring Bean 自动装配到默认方法的接口中

我需要向某些类实现的接口添加默认方法,但我的 IDE 抱怨 ( bean may not have been initialized)。代码将是这样的:

public interface IValidator {

    MyValidationBean beanToBeAutowired;
    ...
    default Boolean doSomeNewValidations(){
        return beanToBeAutowired.doSomeNewValidations();
    }
}
Run Code Online (Sandbox Code Playgroud)

是不允许自动装配到接口还是代码有问题?使用@Component界面上没有任何区别。

我宁愿保留这种设计而不是使用抽象类。

java spring spring-boot

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

@Transactional 不适用于 Spring Boot 和 JDBC

我的服务应该将数据保存到父数据库表和子数据库表中,并在发生错误时回滚。我尝试使用硬编码强制错误RuntimeException,发现无论如何都会提交事务。我缺少什么?我正在使用 Spring Boot 2,包括spring-boot-starter-jdbc依赖项。

数据库是Oracle 11g。

主要配置:

@SpringBootApplication
@EnableTransactionManagement
public class MyApplication extends SpringBootServletInitializer{

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(MyApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}
Run Code Online (Sandbox Code Playgroud)

服务层:

    @Service
    public class MyBean {

    private final NamedParameterJdbcTemplate jdbcTemplate;        
    private final MyDAO myDao;

    @Autowired
    public MyBean (NamedParameterJdbcTemplate jdbcTemplate, MyDAO myDao) {
        this.jdbcTemplate = jdbcTemplate;
        this.myDao= myDao;
    }

    @Override
    @Transactional
    public void saveData(...){
        myDao.saveData(jdbcTemplate, ...);
    }

}
Run Code Online (Sandbox Code Playgroud)

道:

public void saveData(jdbcTemplate, ...){
    saveDataInParentDatatable(jdbcTemplate, …
Run Code Online (Sandbox Code Playgroud)

java spring spring-boot

5
推荐指数
2
解决办法
6774
查看次数

Sonarqube 误报“使用 try-with-resources 或在“finally”子句中关闭此“ResultSet””

Sonarqube 一直用这个问题标记代码,在我看来,这是一个误报。代码如下所示:

try(PreparedStatement st=con.prepareStatement(myQuery)){
    st.setInt(1, myValue);
    ...
    ResultSet rs = st.executeQuery();
    ...
}
Run Code Online (Sandbox Code Playgroud)

如果我没记错的话,PreparedStatement 实现了 Closeable,并且在关闭自身时,它也会关闭底层的 ResultSet。

这种行为会阻止 ResultSet 保持打开状态,但 Sonarqube 分析将其标记为严重错误。

我错了吗?在这种情况下,有什么方法可以让 Sonarqube 忽略这条规则?

在 Sonarqube 6.7.3 和 JDK 8 下测试。

ResultSetjavadoc:

当生成它的 Statement 对象关闭、重新执行或用于从多个结果的序列中检索下一个结果时,ResultSet 对象将自动关闭。

java false-positive sonarqube

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

标签 统计

java ×3

spring ×2

spring-boot ×2

false-positive ×1

sonarqube ×1