SpringBoot實現(xiàn)多數(shù)據(jù)源配置的示例詳解
配置文件
Pom 包就不貼了比較簡單該依賴的就依賴,主要是數(shù)據(jù)庫這邊的配置:
mybatis.config-location=classpath:mybatis/mybatis-config.xml spring.datasource.test1.jdbc-url=jdbc:mysql://localhost:3306/test1?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true spring.datasource.test1.username=root spring.datasource.test1.password=root spring.datasource.test1.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.test2.jdbc-url=jdbc:mysql://localhost:3306/test2?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true spring.datasource.test2.username=root spring.datasource.test2.password=root spring.datasource.test2.driver-class-name=com.mysql.cj.jdbc.Driver
一個 test1 庫和一個 test2 庫,其中 test1 位主庫,在使用的過程中必須指定主庫,不然會報錯。
數(shù)據(jù)源配置
@Configuration @MapperScan(basePackages = "com.test.mapper.test1", sqlSessionTemplateRef = "test1SqlSessionTemplate") public class DataSource1Config { @Bean(name = "test1DataSource") @ConfigurationProperties(prefix = "spring.datasource.test1") @Primary public DataSource testDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "test1SqlSessionFactory") @Primary public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/test1/*.xml")); return bean.getObject(); } @Bean(name = "test1TransactionManager") @Primary public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name = "test1SqlSessionTemplate") @Primary public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }
最關鍵的地方就是這塊了,一層一層注入,首先創(chuàng)建 DataSource,然后創(chuàng)建 SqlSessionFactory 再創(chuàng)建事務,最后包裝到 SqlSessionTemplate 中。其中需要指定分庫的 mapper 文件地址,以及分庫dao層代碼。
@MapperScan(basePackages = "com.test.mapper.test1", sqlSessionTemplateRef = "test1SqlSessionTemplate")
這塊的注解就是指明了掃描 dao 層,并且給 dao 層注入指定的 SqlSessionTemplate。所有@Bean都需要按照命名指定正確。
dao 層和 xml層
dao 層和 xml 需要按照庫來分在不同的目錄,比如:test1 庫 dao 層在com.test.mapper.test1包下,test2 庫在com.test.mapper.test2
public interface User1Mapper { List<UserEntity> getAll(); UserEntity getOne(Long id); void insert(UserEntity user); void update(UserEntity user); void delete(Long id); }
xml 層
<mapper namespace="com.test.mapper.test1.User1Mapper" > <resultMap id="BaseResultMap" type="com.test.model.User" > <id column="id" property="id" jdbcType="BIGINT" /> <result column="userName" property="userName" jdbcType="VARCHAR" /> <result column="passWord" property="passWord" jdbcType="VARCHAR" /> <result column="user_sex" property="userSex" javaType="com.test.enums.UserSexEnum"/> <result column="nick_name" property="nickName" jdbcType="VARCHAR" /> </resultMap> <sql id="Base_Column_List" > id, userName, passWord, user_sex, nick_name </sql> <select id="getAll" resultMap="BaseResultMap" > SELECT <include refid="Base_Column_List" /> FROM users </select> <select id="getOne" parameterType="java.lang.Long" resultMap="BaseResultMap" > SELECT <include refid="Base_Column_List" /> FROM users WHERE id = #{id} </select> <insert id="insert" parameterType="com.test.model.User" > INSERT INTO users (userName,passWord,user_sex) VALUES (#{userName}, #{passWord}, #{userSex}) </insert> <update id="update" parameterType="com.test.model.User" > UPDATE users SET <if test="userName != null">userName = #{userName},</if> <if test="passWord != null">passWord = #{passWord},</if> nick_name = #{nickName} WHERE id = #{id} </update> <delete id="delete" parameterType="java.lang.Long" > DELETE FROM users WHERE id =#{id} </delete> </mapper>
測試
測試可以使用 SpringBootTest,也可以放到 Controller中,這里只貼 Controller 層的使用。
@RestController public class UserController { @Autowired private User1Mapper user1Mapper; @Autowired private User2Mapper user2Mapper; @RequestMapping("/getUsers") public List<UserEntity> getUsers() { List<UserEntity> users=user1Mapper.getAll(); return users; } @RequestMapping("/getUser") public UserEntity getUser(Long id) { UserEntity user=user2Mapper.getOne(id); return user; } @RequestMapping("/add") public void save(UserEntity user) { user2Mapper.insert(user); } @RequestMapping(value="update") public void update(UserEntity user) { user2Mapper.update(user); } @RequestMapping(value="/delete/{id}" public void delete(@PathVariable("id") Long id) { user1Mapper.delete(id); } }
Mybatis 注解版本配置多數(shù)據(jù)源和 Xml 版本基本一致。
以上就是SpringBoot實現(xiàn)多數(shù)據(jù)源配置的示例詳解的詳細內(nèi)容,更多關于SpringBoot多數(shù)據(jù)源配置的資料請關注腳本之家其它相關文章!
相關文章
Spring Boot 2.x基礎教程之使用@Scheduled實現(xiàn)定時任務的方法
在Spring Boot中編寫定時任務是非常簡單的事,下面通過實例介紹如何在Spring Boot中創(chuàng)建定時任務,實現(xiàn)每過5秒輸出一個當前時間,感興趣的朋友跟隨小編一起看看吧2021-07-07詳解json string轉(zhuǎn)換為java bean及實例代碼
這篇文章主要介紹了詳解json string轉(zhuǎn)換為java bean及實例代碼的相關資料,這里提供實例代碼幫助大家理解,需要的朋友可以參考下2017-07-07Java數(shù)據(jù)結(jié)構及算法實例:冒泡排序 Bubble Sort
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構及算法實例:冒泡排序 Bubble Sort,本文直接給出實現(xiàn)代碼,代碼中包含詳細注釋,需要的朋友可以參考下2015-06-06SpringBoot實現(xiàn)登錄攔截器超詳細教程分享
對于管理系統(tǒng)或其他需要用戶登錄的系統(tǒng),登錄驗證都是必不可少的環(huán)節(jié),尤其在?SpringBoot?開發(fā)的項目中。本文為大家準備了超詳細的SpringBoot實現(xiàn)登錄攔截器方法,快收藏一波吧2023-02-0270行Java代碼實現(xiàn)深度神經(jīng)網(wǎng)絡算法分享
這篇文章主要介紹了70行Java代碼實現(xiàn)深度神經(jīng)網(wǎng)絡算法分享,涉及神經(jīng)網(wǎng)絡的計算過程,神經(jīng)網(wǎng)絡的算法程序?qū)崿F(xiàn),多層神經(jīng)網(wǎng)絡完整程序?qū)崿F(xiàn)等相關內(nèi)容,具有一定參考價值,需要的朋友可以參考下。2017-11-11