Spring-boot JDBC with multiple DataSources sample
来源:互联网 发布:上海行知小学对口中学 编辑:程序博客网 时间:2024/06/14 10:41
Spring-boot JDBC with multiple DataSources sample
Spring-Boot's auto-configurer seems good for simple applications. For example it automatically creates DataSource and JdbcTemplate, when you need to connect to the database. But what about less trivial configuration, when you have several different databases?I found the way to have multiple DataSources for Spring-Boot-based application.
In the sample below I have two special (db-related) Configurations, one properties file with connections' parameters and two Repositories.
Each @Repository connects with appropriate database through separate DataSource.
spring.ds_items.driverClassName=org.postgresql.Driver spring.ds_items.url=jdbc:postgresql://srv0/test spring.ds_items.username=test0 spring.ds_items.password=test0 spring.ds_users.driverClassName=org.postgresql.Driver spring.ds_users.url=jdbc:postgresql://srv1/test spring.ds_users.username=test1 spring.ds_users.password=test1
package sb; import org.springframework.boot.autoconfigure.jdbc.TomcatDataSourceConfiguration; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; @Configuration @ConfigurationProperties(name = "spring.ds_items") public class DatabaseItemsConfig extends TomcatDataSourceConfiguration { @Bean(name = "dsItems") public DataSource dataSource() { return super.dataSource(); } @Bean(name = "jdbcItems") public JdbcTemplate jdbcTemplate(DataSource dsItems) { return new JdbcTemplate(dsItems); } }
package sb; import org.springframework.boot.autoconfigure.jdbc.TomcatDataSourceConfiguration; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; @Configuration @ConfigurationProperties(name = "spring.ds_users") public class DatabaseUsersConfig extends TomcatDataSourceConfiguration { @Bean(name = "dsUsers") public DataSource dataSource() { return super.dataSource(); } @Bean(name = "jdbcUsers") public JdbcTemplate jdbcTemplate(DataSource dsUsers) { return new JdbcTemplate(dsUsers); } }
package sb; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Repository; import java.sql.ResultSet; import java.sql.SQLException; @Repository public class ItemRepository { protected final Logger log = LoggerFactory.getLogger(getClass()); @Autowired @Qualifier("jdbcItems") protected JdbcTemplate jdbc; public Item getItem(long id) { return jdbc.queryForObject("SELECT * FROM sb_item WHERE id=?", itemMapper, id); } private static final RowMapper<Item> itemMapper = new RowMapper<Item>() { public Item mapRow(ResultSet rs, int rowNum) throws SQLException { Item item = new Item(rs.getLong("id"), rs.getString("title")); item.price = rs.getDouble("id"); return item; } }; }
package sb; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Repository; import java.sql.ResultSet; import java.sql.SQLException; @Repository public class UserRepository { protected final Logger log = LoggerFactory.getLogger(getClass()); @Autowired @Qualifier("jdbcUsers") protected JdbcTemplate jdbc; public User getUser(long id) { return jdbc.queryForObject("SELECT * FROM sb_user WHERE id=?", userMapper, id); } private static final RowMapper<User> userMapper = new RowMapper<User>() { public User mapRow(ResultSet rs, int rowNum) throws SQLException { User user = new User(rs.getLong("id"), rs.getString("name")); user.alias = rs.getString("alias"); return user; } }; }
package sb; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class Controller { protected final Logger log = LoggerFactory.getLogger(getClass()); @Autowired private UserRepository users; @Autowired private ItemRepository items; @RequestMapping("test") public String test() { log.info("Test"); return "OK"; } @RequestMapping("user") public User getUser(@RequestParam("id") long id) { log.info("Get user"); return users.getUser(id); } @RequestMapping("item") public Item getItem(@RequestParam("id") long id) { log.info("Get item"); return items.getItem(id); } }
package sb; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class) @Configuration @ComponentScan(basePackages = "sb") public class Application { public static void main(String[] args) throws Throwable { SpringApplication app = new SpringApplication(Application.class); app.run(); } }
0 0
- Spring-boot JDBC with multiple DataSources sample
- Spring boot @Qualifier doesn't work with datasources
- spring datasources
- Load multiple configuration files from different directories with Spring Boot
- Tomcat DataSources JDBC
- Configuring JDBC DataSources
- Spring Boot Multiple Datasource
- Spring Boot 之 Accessing Relational Data using JDBC with Spring
- Distributed transactions with multiple databases, Spring Boot, Spring Data JPA and Atomikos
- Distributed transactions with multiple databases, Spring Boot, Spring Data JPA and Atomikos
- spring-boot with docker
- using JDBC with Spring
- spring-boot,jdbc,jsp配置
- Spring Boot JDBC 连接数据库
- Spring boot + jdbc学习笔记
- Spring Boot JDBC 连接数据库
- Spring Boot JDBC 连接数据库
- Maven搭建Spring Boot JDBC
- 《Java150道面试题全集》
- 循环再体验
- 开启ESXi Shell或SSH后ESXi出现警告的解决方法
- c和c++的区别
- Javascript基础知识
- Spring-boot JDBC with multiple DataSources sample
- 多态
- 微服务(Microservice)那点事
- 网易视频云一站式托管音视频技术 助推游戏直播新方向
- 协程及libco介绍
- READING NOTE: Densely Connected Convolutional Networks
- 使用spring注入时出现is not writable or has an invalid setter method
- 常量池技术2(编译篇)
- 编译android源码时,jack server 出现out of memory error 错误的解决方法