springboot下使用JdbcTemplate和MongoTemplate链接多个mongodb源+sql源

本文介绍了如何在SpringBoot应用中使用JdbcTemplate和MongoTemplate同时连接多个MongoDB数据源以及SQL数据源。配置文件application.yml中详细配置了数据源,DBConfig.java为配置类。注意,当MongoDB的URI中包含特殊字符如'@'时,需要进行URL编码。此外,使用twoMongoTemplate会导致插入数据时自动生成 '_class' 键,如要避免,可以参照oneMongoTemplate的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

application.yml配置

db:
  mongo:
    one: "mongodb://[user]:[pwd]@[ip]:[port]/[db]"
    two: "mongodb://[user]:[pwd]@[ip]:[port]/[db]"
  sql:
     url:"jdbc:sqlserver://ip;DatabaseName=;instanceName="
     user: "test"
     pwd: "test"
     driver: "com.microsoft.sqlserver.jdbc.SQLServerDriver" 

配置类:DBConfig.java

@Configuration
public class DBConfig {

    @Value("${db.sql.url}")
    private String sqlUrl;
    @Value("${db.sql.user}")
    private String sqlUsername;
    @Value("${db.sql.pwd}")
    private String sqlPassword;
    @Value("${db.sql.driver}")
    private String sqlDriver;

    @Value("${db.mongo.one}")
    private String mongoOneUri;

    @Value("${db.mongo.two}")
    private String mongoTwoUri;

    @Bean(name = "sqlDataSource")
    public DataSource sourceDataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(sqlDriver);
        dataSource.setUrl(sqlUrl);
        dataSource.setUsername(sqlUsername);
        dataSource.setPassword(sqlPassword);
        return dataSource;
    }

    @Bean(name = "oneMongoFactory")
    @Primary
    public MongoDbFactory oneMongoDbFactory() throws Exception {
        return new SimpleMongoDbFactory(new MongoClientURI(mongoOneUri));
    }

    @Bean(name = "twoMongoDbFactory")
    public MongoDbFactory twoMongoDbFactory() throws Exception {
        return new SimpleMongoDbFactory(new MongoClientURI(mongoTwoUri));
    }

    @Bean(name = "sqlJdbcTemplate")
    public JdbcTemplate JdbcTemplate(@Qualifier("sqlDataSource") DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }

    @Bean(name = "oneMongoTemplate")
    @Primary
    public MongoTemplate oneMongoTemplate(@Qualifier("oneMongoFactory") MongoDbFactory mongoDbFactory) {
        MappingMongoConverter mappingMongoConverter = new MappingMongoConverter(new DefaultDbRefResolver(mongoDbFactory),
                new MongoMappingContext());
        mappingMongoConverter.setTypeMapper(new DefaultMongoTypeMapper(null));
        return new MongoTemplate(mongoDbFactory, mappingMongoConverter);
    }

    @Bean(name = "twoMongoTemplate")
    public MongoTemplate twoMongoTemplate(@Qualifier("twoMongoDbFactory") MongoDbFactory mongoDbFactory) {
        return new MongoTemplate(mongoDbFactory);
    }

Tips
1.mongo的uri的user或者pwd中若含有@等字符,需要对其进行urlencode。
2.上例中twoMongoTemplate会在插入mongo库时自动生成”_class”的key,若想去掉”_class”,使用oneMongoTemplate的例子即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值