当前位置: 首页 > 知识库问答 >
问题:

spring boot-jdbctemplate中的多个数据源为空

徐昊焜
2023-03-14
#first DB
integration.datasource.jdbc-url=jdbc:sqlserver://localhost:port1/my_sample_schema1
integration.datasource.username=username
integration.datasource.password=password
integration.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
integration.jpa.database-platform=org.hibernate.dialect.SQLServer2012Dialect
integration.jpa.show-sql=true


#second DB
spring.datasource.jdbc-url=jdbc:sqlserver://localhost:port2/my_sample_schema2
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.platform=org.hibernate.dialect.SQLServer2012Dialect
spring.jpa.show-sql=true 
@Configuration
public class DBConfig {

    
      
    @Primary
    @Bean(name = "integrationDataSource")
    @ConfigurationProperties(prefix = "integration.datasource")
    public DataSource integrationDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "mainDataSource")
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource mainDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Primary
    @Autowired
    @Bean(name = "integrationJdbcTemplate")
    public JdbcTemplate integrationJdbcTemplate(@Qualifier("integrationDataSource") DataSource integrationDataSource) {
        return new JdbcTemplate(integrationDataSource);
    }

    @Bean(name ="mainJdbcTemplate")
    @Autowired
    public JdbcTemplate mainJdbcTemplate(@Qualifier("mainDataSource") DataSource mainDataSource) {
        return new JdbcTemplate(mainDataSource);
    }
}

sampleClass.java

@Slf4j
@Component
public class SampleClass{

    @Autowired
    private  JdbcTemplate mainJdbcTemplate;
    
    @Autowired
    @Qualifier("integrationJdbcTemplate")
    private static JdbcTemplate integrationTemplate;
    
    public static final String SELECT_QUERY = "select * from tableA";

    public List<SampleDto> getDBData(SampleDto fileData) {
        List<SampleDto> data = null;
        try {
            data = integrationTemplate.query(
                    SampleClass.SELECT_QUERY, new Object[] { param1, param2 },
                    new SampleDataMapper());
        } catch (DataAccessException e) {
            log.error(e.getMessage(), e);
        }
        return data;
    }

}

在sampleClass.java am中,将integrationTemplate作为null。为什么会这样?mainJdbcTemplate正在工作。但是integrationTemplate变为null,无法导出查询。

共有1个答案

赵智
2023-03-14

问题是您有一个@autowired静态字段

@autowired中,字段是在bean构造之后,在调用任何配置方法之前注入的。阅读这里以获得更多关于Ioc和Bean注入的信息。

删除静态:

@Autowired
@Qualifier("integrationJdbcTemplate")
private JdbcTemplate integrationTemplate;
private static JdbcTemplate integrationTemplate;

@Autowired
public void setIntegrationJdbcTemplate(JdbcTemplate integrationTemplate){
    SampleClass.integrationTemplate = integrationTemplate;
}
@Autowired
private JdbcTemplate integrationJdbcTemplate;
 类似资料:
  • 我想在Spring Boot项目中注入一个特定的。对于多个配置,我尝试遵循以下示例:http://spring.io/blog/2014/05/27/spring-boot-1-1-0-M2-available-now 我的代码确实会编译和运行,但只会考虑带有注释的数据源,不管我在类中将什么作为。我的相关代码如下: 我做了一个快速的服务来尝试它: :

  • 我正在尝试使用两个数据源与我的SpringBoot应用程序,但无法获得第二个数据源自动连接。我尝试过很多事情,但这是我最接近的一次: 我的Yaml文件: 这是我到目前为止最接近的一次。我之所以说它是最接近的,是因为如果我删除@qualifier,那么我的两个dao方法实际上都可以工作,假设SECOND_SELECT语句对于我的DB1是有效的SQL语句。当我为非主datasouce输入@Qualif

  • 问题内容: 根据Spring 文档,使用Spring JdbcTemplate的步骤如下: 然后, 基本上,JdbcTemplate是使用数据源的setter在Component类内部创建的。 这样做有什么问题,因此应用程序中只有一个jdbcTemplate实例吗? 然后将jdbcTemplate本身直接注入到组件中 有没有理由不能将jdbcTemplate本身直接注入到组件类中? SGB 问题答

  • 问题内容: 我正在尝试在Spring项目中测试一个类。我想在测试类和dao类中进行尽可能多的更改,这样我就不必因为更改而重新测试所有类型的东西。 我正在使用的类具有通过以下实例化的类变量: 我想测试的方法使a 运行定义的SQL查询并将结果返回到列表。 我在测试用例中创建了以下内容,但不确定如何使用它。我可以使用Mockito使以下代码返回特定的字符串列表吗? 我可以以某种方式使用或其他命令来设置要

  • 本文向大家介绍springboot + mybatis配置多数据源示例,包括了springboot + mybatis配置多数据源示例的使用技巧和注意事项,需要的朋友参考一下 在实际开发中,我们一个项目可能会用到多个数据库,通常一个数据库对应一个数据源。 代码结构: 简要原理: 1)DatabaseType列出所有的数据源的key---key 2)DatabaseContextHolder是一个线

  • 是否可以将多个数据源声明到WebSphere Liberty Profileserver.xml?有什么例子吗? 我尝试这样做,但我只能看到一个。当查找第二个时,我收到一条错误消息,提示找不到jndi名称。 我的server.xml: 以及网络中的定义.xml: 在jconsole看来,我只能看到http://i.stack.imgur.com/euN8e.jpg的DSPB 怎么了? 因此,ibm