SQL server使用JdbcTemplate配置多数据源

这是承接上一篇MySQL和SQL server俩数据源配置
出于需求,在原来的基础上得再加个SQL server的数据源。
所以最后一共有MySQL数据源1个(使用Jpa),SQL server数据源2个(使用JdbcTemplate)
配置改动不大。

application.properties
#mysql数据源1
spring.datasource.primary.jdbc-url=jdbc:mysql://localhost:3306/db1?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
spring.datasource.primary.username=abc
spring.datasource.primary.password=123456
spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver

#sql server 数据源2
spring.datasource.second.jdbc-url=jdbc:sqlserver://localhost:1433;database=DB2
spring.datasource.second.username=abc
spring.datasource.second.password=123456
spring.datasource.second.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

#sql server 数据源3
spring.datasource.third.jdbc-url=jdbc:sqlserver://localhost:1433;database=DB3
spring.datasource.third.username=abc
spring.datasource.third.password=123456
spring.datasource.third.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
数据源配置类DataSourceConfig
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;

@Configuration
public class DataSourceConfig {

    /***
     * 配置主数据源
     * @return
     */
    @Primary
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.primary")
    public DataSource primaryDataSource() {
        return DataSourceBuilder.create().build();
    }

    /**
     * 第2数据源
     * @return
     */
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.second")
    public DataSource secondaryDataSource() {
        return DataSourceBuilder.create().build();
    }

    /**
     * 第3数据源
     * @return
     */
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.third")
    public DataSource tertiaryDataSource() {
        return DataSourceBuilder.create().build();
    }

    //第2数据源为SQL server,使用jdbcTemplate
    @Bean(name = "secondaryJdbcTemplate")
    public JdbcTemplate secondaryJdbcTemplate(@Qualifier("secondaryDataSource") DataSource secondaryDataSource) {
        return new JdbcTemplate(secondaryDataSource);
    }

    //第3数据源为SQL server,使用jdbcTemplate
    @Bean(name = "tertiaryJdbcTemplate")
    public JdbcTemplate tertiaryJdbcTemplate(@Qualifier("tertiaryDataSource") DataSource tertiaryDataSource) {
        return new JdbcTemplate(tertiaryDataSource);
    }
}

主数据源就是使用Jpa的MySQL数据源,没有改动,保持前面的配置即可。
不清楚的可以参考上一篇Springboot同时使用MySQL和SQL server多数据源配置, 分别使用Jpa和JdbcTemplate
这里的第3数据源是新增的SQL server数据源,也是使用JdbcTemplate,和前面一样的配置。
但是!问题来了,当使用SQL server数据源的时候,发现无法正常注入JdbcTemplate。
问题代码如下:

@Autowired
private JdbcTemplate jdbcTemplate;

其实原因也很好理解,通俗点,就是JdbcTemplate现在管理着2个SQL server 数据源,但是像上面这样注入的时候,它不知道该使用哪个数据源。
所以在注入时,要指定注册了对应数据源的JdbcTemplate的BeanName,如下:

@Autowired
@Qualifier("secondaryJdbcTemplate")
private JdbcTemplate jdbcTemplate;
1. 首先打开IntelliJ IDEA,点击菜单栏中的File,选择New,然后选择Project。 2. 在弹出的New Project窗口中,选择Java,然后选择Maven。 3. 在下一步中,填写项目的GroupId和ArtifactId,然后点击Next。 4. 在下一步中,选择项目的名称和项目的位置,然后点击Finish。 5. 在项目中,打开pom.xml文件,添加以下依赖: <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <version>8.2.2.jre11</version> </dependency> 6. 在项目中,打开application.properties文件,添加以下配置: spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=your_database_name spring.datasource.username=your_username spring.datasource.password=your_password spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver 7. 然后在项目中,创建一个类,用于测试数据库连接: import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.jdbc.core.JdbcTemplate; @SpringBootApplication public class Application { @Autowired private JdbcTemplate jdbcTemplate; public static void main(String[] args) { SpringApplication.run(Application.class, args); } public void run(String... args) throws Exception { String sql = "SELECT COUNT(*) FROM your_table_name"; int count = jdbcTemplate.queryForObject(sql, Integer.class); System.out.println("Count: " + count); } } 8. 最后,运行项目,如果一切正常,应该可以看到输出结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值