【问题标题】:Multiple SimpleJDBCCall beans causing Sonar issue in Java多个 SimpleJDBCCall bean 在 Java 中导致声纳问题
【发布时间】:2021-06-20 08:45:19
【问题描述】:

我的应用程序是 springboot,我有 DatabaseConfig,其中多个 SimpleJDBCCall bean 被配置为执行存储的 proc,并且我有 DAO,其中使用构造函数注入 bean。这工作得很好,但是这在声纳上失败了,因为我有超过 7 个豆子。我们无法调整声纳设置,因为许多团队都在使用它。所以请在这里建议, 下面是我的 DatabaseConfig 的样子

@Configuration
public class DatabaseConfig {

@Autowired
public JDBCTemplate jdbcT;

@Bean(spOne)
public SimpleJDBCCall spOne(){
   return new SimpleJDBCCall(jdbcT).withSchema(x).....;
}

@Bean(spTwo)
public SimpleJDBCCall spTwo(){
   return new SimpleJDBCCall(jdbcT).withSchema(x).....;
}

@Bean(spTen)
public SimpleJDBCCall spTen(){
   return new SimpleJDBCCall(jdbcT).withSchema(x).....;
}}

下面是我的 DAO 类的样子

@Repository
public class Dao{
private JDBCTemplate jdbcT;
private SimpleJDBCCall spOne; private SimpleJDBCCall spTwo; private SimpleJDBCCall spTen;

  public Dao(JDBCTemplate jdbcT, SimpleJDBCCall spOne; SimpleJDBCCall spTwo; SimpleJDBCCall spTen){
         this.jdbcT = jdbcT;
         this.spOne = spOne;
         this.spOne = spTwo; // More settings of storedProc beans.
         this.spOne = spTen;
}}

【问题讨论】:

    标签: java spring-boot sonarqube simplejdbccall


    【解决方案1】:

    您可以将 Map 定义为构造函数参数,如下所示:

    public Dao(JDBCTemplate template, Map<String, SimpleJDBCCall> jdbcCalls){
        
    }
    

    然后,Spring 会将 SimpleJDBCCall 类型的所有 bean 实例添加到映射中。映射的键是 bean 名称(在您的情况下,例如“spOne”、“spTwo”等),值是 bean 的实例。如果你仍然可以用这个来做你的用例,它可能是最简单的解决方案。

    如果您不访问代码中的特定 bean,但例如只需遍历所有模板来执行调用,那么 List 而不是 map 就足够了。

    【讨论】:

      猜你喜欢
      • 2019-12-20
      • 2016-01-03
      • 1970-01-01
      • 2011-03-02
      • 2020-11-14
      • 2012-11-03
      • 2015-12-02
      • 2011-06-15
      • 2021-05-31
      相关资源
      最近更新 更多