SpringBoot配置多数据源 在一个接口中访问两个库的数据

1.主要用的阿里Druid连接池

xml如下

 <!-- Druid连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.9</version>
        </dependency>
        <!--jdbc-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
            <version>2.0.1.RELEASE</version>
        </dependency>
        <!--Driver连接驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

2.配置 application.properties 或者yml ,我这里用的 application.properties

server.port=6666

# 数据源1
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.jdbc-url=jdbc:mysql://localhost:3306/dome?allowPublicKeyRetrieval=true&allowMultiQueries=true&useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root

# 数据源2
spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.secondary.jdbc-url=jdbc:mysql://localhost:3306/test1?allowPublicKeyRetrieval=true&allowMultiQueries=true&useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.secondary.username=root
spring.datasource.secondary.password=root

3.配置DataSourceConfig 


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 javax.sql.DataSource;


@Configuration
public class DataSourceConfig {
    @Bean
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource primaryDataSource() {
        return DataSourceBuilder.create().build();
    }

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

}

4. 添加 JdbcTemplateConfig 配置类


import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;

@Configuration
public class JdbcTemplateConfig {
    @Bean
    public JdbcTemplate primaryJdbcTemplate(DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }

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

5.上代码 R 是返回值对象,自己可直接返回map ,( 我库的数据就两条 sql用 * 了) 


import com.test.demo.utils.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * @author lbap
 */
@RestController
@RequestMapping("/a")
public class UserController {

    @Autowired
    @Qualifier("primaryJdbcTemplate")
    private JdbcTemplate primaryJdbcTemplate;

    @Autowired
    @Qualifier("secondaryJdbcTemplate")
    private JdbcTemplate secondaryJdbcTemplate;

    @GetMapping("/b")
    public R query() {
        List<Map<String, Object>> list1 = primaryJdbcTemplate.queryForList("SELECT * FROM user");
        List<Map<String, Object>> list2 = secondaryJdbcTemplate.queryForList("SELECT * FROM admin");

        HashMap<String, Object> map = new HashMap<>();
        map.put("list1",list1);
        map.put("list2",list2);
        return R.ok(map);
    }
}

6.查询结果

{

    "code": 0,

    "msg": null,

    "data": {

        "list1": [

            {

                "id": 1,

                "name": "第一个库",

                "phone": "6666",

                "addr": "高新区"

            },

            {

                "id": 2,

                "name": "第一个库",

                "phone": "123456",

                "addr": "中原区"

            }

        ],

        "list2": [

            {

                "id": 1,

                "name": "第二个库",

                "phone": "789465",

                "addr": "中国"

            },

            {

                "id": 2,

                "name": "第二个库",

                "phone": "456789",

                "addr": "中国"

            }

        ]

    }

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个使用Spring Boot配置数据的示例: 1. 创建两个数据 我们将创建两个MySQL数据:mydb1和mydb2。在每个数据,我们将创建一个表:user。 CREATE DATABASE mydb1; USE mydb1; CREATE TABLE user (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50)); CREATE DATABASE mydb2; USE mydb2; CREATE TABLE user (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50)); 2. 添加依赖 在pom.xml文件添加以下依赖: ``` <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>3.4.5</version> </dependency> </dependencies> ``` 3. 配置数据 在application.properties文件添加以下配置: ``` # 数据1 spring.datasource.one.url=jdbc:mysql://localhost:3306/mydb1?useSSL=false&serverTimezone=Asia/Shanghai spring.datasource.one.username=root spring.datasource.one.password=root spring.datasource.one.driver-class-name=com.mysql.cj.jdbc.Driver # 数据2 spring.datasource.two.url=jdbc:mysql://localhost:3306/mydb2?useSSL=false&serverTimezone=Asia/Shanghai spring.datasource.two.username=root spring.datasource.two.password=root spring.datasource.two.driver-class-name=com.mysql.cj.jdbc.Driver ``` 4. 配置JPA 在application.properties文件添加以下配置: ``` # JPA配置1 spring.jpa.one.database=default spring.jpa.one.show-sql=true spring.jpa.one.hibernate.ddl-auto=update # JPA配置2 spring.jpa.two.database=default spring.jpa.two.show-sql=true spring.jpa.two.hibernate.ddl-auto=update ``` 5. 创建实体类 在src/main/java目录下创建两个实体类:User1和User2,分别对应mydb1和mydb2数据的user表。 User1.java: ``` @Entity @Table(name="user") public class User1 { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Integer id; private String name; // getter和setter方法 } ``` User2.java: ``` @Entity @Table(name="user") public class User2 { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Integer id; private String name; // getter和setter方法 } ``` 6. 创建Repository 在src/main/java目录下创建两个Repository接口:User1Repository和User2Repository,分别对应mydb1和mydb2数据的user表。 User1Repository.java: ``` @Repository public interface User1Repository extends JpaRepository<User1, Integer> { } ``` User2Repository.java: ``` @Repository public interface User2Repository extends JpaRepository<User2, Integer> { } ``` 7. 创建Service 在src/main/java目录下创建两个Service类:User1Service和User2Service,分别对应mydb1和mydb2数据的user表。 User1Service.java: ``` @Service public class User1Service { @Autowired private User1Repository user1Repository; // 方法1:获取所有用户 public List<User1> getAllUsers() { return user1Repository.findAll(); } // 方法2:添加一个用户 public void addUser(User1 user) { user1Repository.save(user); } } ``` User2Service.java: ``` @Service public class User2Service { @Autowired private User2Repository user2Repository; // 方法1:获取所有用户 public List<User2> getAllUsers() { return user2Repository.findAll(); } // 方法2:添加一个用户 public void addUser(User2 user) { user2Repository.save(user); } } ``` 8. 测试 在src/test/java目录下创建一个测试类:MultiDataSourceTest。 MultiDataSourceTest.java: ``` @SpringBootTest public class MultiDataSourceTest { @Autowired private User1Service user1Service; @Autowired private User2Service user2Service; // 测试方法1:添加一个用户到mydb1数据的user表 @Test public void testAddUser1() { User1 user = new User1(); user.setName("张三"); user1Service.addUser(user); } // 测试方法2:添加一个用户到mydb2数据的user表 @Test public void testAddUser2() { User2 user = new User2(); user.setName("李四"); user2Service.addUser(user); } // 测试方法3:获取mydb1数据user表的所有用户 @Test public void testGetAllUsers1() { List<User1> users = user1Service.getAllUsers(); for (User1 user : users) { System.out.println(user.getName()); } } // 测试方法4:获取mydb2数据user表的所有用户 @Test public void testGetAllUsers2() { List<User2> users = user2Service.getAllUsers(); for (User2 user : users) { System.out.println(user.getName()); } } } ``` 运行测试类,可以看到输出的结果: ``` 张三 李四 ``` 这表明我们已经成功地配置了多个数据,并使用JPA和Repository来访问它们。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值