Spring Boot学习进阶笔记(四)-多数据源配置(JdbcTemplate、Spring-data-jpa)

在实际开发过程中,往往我们需要链接多个数据库进行操作,所以多数据源的配置就在所难免了。

一、JdbcTemplate支持:

spring boot配置多数据源比较简单

1)修改配置文件“application.properties”

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #3933ff }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; min-height: 17.0px }
span.s1 { color: #000000 }
span.s2 { text-decoration: underline }
span.s3 { color: #3933ff }

spring.datasource.primary.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false

spring.datasource.primary.username=root

spring.datasource.primary.password=123456

spring.datasource.primary.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.secondary.url=jdbc:mysql://192.168.2.111:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false

spring.datasource.secondary.username=root

spring.datasource.secondary.password=123456

spring.datasource.secondary.driver-class-name=com.mysql.jdbc.Driver

2)添加数据类“DataSourceConfig.java”

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; min-height: 17.0px }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #777777 }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #3933ff }
span.s1 { color: #931a68 }
span.s2 { color: #000000 }
span.s3 { color: #777777 }
span.s4 { color: #3933ff }
span.s5 { color: #7e504f }
span.Apple-tab-span { white-space: pre }

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;

import org.springframework.boot.context.properties.ConfigurationProperties;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.annotation.Primary;

import org.springframework.jdbc.core.JdbcTemplate;

@Configuration

public class DataSourceConfig {

  @Bean(name = "primaryDataSource")

@Qualifier("primaryDataSource")

@ConfigurationProperties(prefix="spring.datasource.primary")

public DataSource primaryDataSource() {

return DataSourceBuilder.create().build();

}

@Bean(name = "secondaryDataSource")

@Qualifier("secondaryDataSource")

@Primary

@ConfigurationProperties(prefix="spring.datasource.secondary")

public DataSource secondaryDataSource() {

return DataSourceBuilder.create().build();

}

@Bean(name = "primaryJdbcTemplate")

public JdbcTemplate primaryJdbcTemplate(

@Qualifier("primaryDataSource") DataSource dataSource) {

return new JdbcTemplate(dataSource);

}

@Bean(name = "secondaryJdbcTemplate")

public JdbcTemplate secondaryJdbcTemplate(

@Qualifier("secondaryDataSource") DataSource dataSource) {

return new JdbcTemplate(dataSource);

}

}

3)在service调用的时候根据注解添加不同的JdbcTemplate

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #777777 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #3933ff }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco }
p.p4 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; min-height: 17.0px }
span.s1 { color: #000000 }
span.s2 { color: #777777 }
span.s3 { color: #931a68 }
span.s4 { color: #0326cc }
span.Apple-tab-span { white-space: pre }

@Autowired

@Qualifier("primaryJdbcTemplate")

protected JdbcTemplate jdbcTemplate;

@Autowired

@Qualifier("secondaryJdbcTemplate")

protected JdbcTemplate jdbcTemplate2;

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; color: #777777 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; min-height: 17.0px }
span.s1 { color: #931a68 }
span.s2 { color: #0326cc }
span.s3 { color: #3933ff }
span.s4 { color: #000000 }

@Override

public Integer getUserCount() {

return jdbcTemplate.queryForObject("select count(1) from USER", Integer.class);

}

@Override

public Integer getUserCount2() {

return jdbcTemplate2.queryForObject("select count(1) from USER", Integer.class);

}

二、Spring-data-jpa支持:

1)创建数据源配置类“PrimaryConfig.java”和“SecondConfig.java”,以“”为例子

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.persistence.EntityManager;
import javax.sql.DataSource;
import java.util.Map;

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "entityManagerFactoryPrimary", transactionManagerRef = "transactionManagerPrimary", basePackages = { "com.zh.SpringBootDemo.domain.p" }) // 设置Repository所在位置
public class PrimaryConfig {

@Autowired
@Qualifier("primaryDataSource")
private DataSource primaryDataSource;

@Primary
@Bean(name = "entityManagerPrimary")
public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
return entityManagerFactoryPrimary(builder).getObject().createEntityManager();
}

@Primary
@Bean(name = "entityManagerFactoryPrimary")
public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary(EntityManagerFactoryBuilder builder) {
return builder.dataSource(primaryDataSource).properties(getVendorProperties(primaryDataSource)).packages("com.zh.SpringBootDemo.domain.p") // 设置实体类所在位置
.persistenceUnit("primaryPersistenceUnit").build();
}

@Autowired
private JpaProperties jpaProperties;

private Map<String, String> getVendorProperties(DataSource dataSource) {
return jpaProperties.getHibernateProperties(dataSource);
}

@Primary
@Bean(name = "transactionManagerPrimary")
public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());
}

}

2)创建实体类domain和对应的respository

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

public interface UserRepository extends JpaRepository<User, Long> {

User findByName(String name);

User findByNameAndAge(String name, Integer age);

@Query("from User u where u.name=:name")
User findUser(@Param("name") String name);

}

3)根据注解调用对应的respository即可

时间: 2024-10-11 18:28:00

Spring Boot学习进阶笔记(四)-多数据源配置(JdbcTemplate、Spring-data-jpa)的相关文章

Spring Boot学习进阶笔记(一)-初体验,创建基本的web功能

什么是spring boot?,使用spring boot有什么好处?这些东西不过多陈述,自行百度,在这作为只是以一个开发者的角度,记录下自己学习spring boot的过程,作为一种学习笔记跟大家分享,如果有什么不严谨或者错误的地方,请大家留言指出. 一.初始化项目结构 通过官方网站(http://start.spring.io/)生成基本的maven结构的项目框架,如下图!点击按钮"Generation Project"后生成基本的目录,然后导入到eclipse,就可以进行代码的编

Spring Boot学习进阶笔记(二)-Spring-data-jpa

Spring-data-jpa:简化数据库访问的流程 知识储备:Spring-data-jpa基于hibernate,所以需要了解hibernate的相关知识. 一.首先建立自己的数据库(test)和表(user),表的属性如下图 二.建立实体类"User.java" p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Monaco; min-height: 17.0px } p.p2 { margin: 0.0px 0.0px 0

Spring Boot学习进阶笔记(五)-添加定时任务

一.在Spring Boot的主类中加入@EnableScheduling注解,启用定时任务的配置.@SpringBootApplication@EnableSchedulingpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 二.创建定时任务,每隔5秒打印一下当前时间@Componentpublic cla

spring boot学习总结(一)-- 基础入门 Hello,spring boot!

写在最前 SpringBoot是伴随着Spring4.0诞生的: 从字面理解,Boot是引导的意思,因此SpringBoot帮助开发者快速搭建Spring框架: SpringBoot帮助开发者快速启动一个Web容器: SpringBoot继承了原有Spring框架的优秀基因: SpringBoot简化了使用Spring的过程.  Spring Boot解决哪些问题??? Spring Boot使编码变简单,使配置变简单,使部署变简单,使监控变简单 下面正式开始!!!快速入门!!! 1.构建Mav

spring boot 学习之五(日志配置)

想直接看这里的我建议先看了我的spring boot 学习之四.因为日志的配置要用到properties. 先了解一下springBoot的日志系统然后再进行配置. springboot默认采用的是slf4j+logback.之前的web模块已经添加过了相关日志的依赖 private static final Logger logger = LoggerFactory.getLogger(LogConfig.class); 我们调用这个对象即可进行日志记录,日志记录默认是打印出来的,我们可以调用

Spring Boot 学习笔记1---初体验之3分钟启动你的Web应用

前言 早在去年就简单的使用了一下Spring Boot,当时就被其便捷的功能所震惊.但是那是也没有深入的研究,随着其在业界被应用的越来越广泛,因此决定好好地深入学习一下,将自己的学习心得在此记录,本文主要围绕以下几点进行说明: Spring Boot 简介 使用Spring Boot快速搭建一个Web应用如有不对的地方,请指正. 1. Spring Boot简介 Spring Boot是一个基于Spring的衍生框架,其主要的目的是帮助我们快速构建独立.生产级别的Spring的应用,其崇尚的理念

Spring boot 学习笔记 (二)- 整合MyBatis

Spring boot 学习笔记 (二)- 整合MyBatis Spring Boot中整合MyBatis,并通过注解方式实现映射. 整合MyBatis 以Spring boot 学习笔记 (一)- Hello world 为基础项目,在pom.xml中添加如下依赖 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter&l

Spring boot 学习笔记 - Hello world

Spring boot 学习笔记 - Hello world spring boot介绍: spring-boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者. Hello world 通过官网https://start.spring.io/

spring boot 学习笔记

Spring Boot系列(一):Spring Boot 入门篇 Spring Boot系列(二):web综合开发 Spring Boot系列(三):Spring Boot中Redis的使用 Spring Boot系列(四):thymeleaf使用详解 Spring Boot系列(五):spring data jpa的使用 Spring Boot系列(六):如何优雅的使用mybatis Spring Boot系列(七):springboot+mybatis多数据源最简解决方案 Spring Bo