快速搭建springboot maven项目 多数据源

  • 新建项目
  • 修改pom
  • 添加配置文件

新建父项目

  1. IDEA -->Spring Initializr, 设置报名,其他next完成
  2. 删除其他目录,值保留.gitignore 和 pom.xml
  3. 修改pom文件
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    <!--    1.删除parent:使用公司自己的parent控制版本 子项目不用再写版本号统一管理(子项目也可以自己修改,就近原则) -->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.3.4.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.example</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>demo</name>
        <description>Demo project for Spring Boot</description>
    <!--    2.添加版本号-->
        <properties>
            <java.version>1.8</java.version>
        </properties>
    <!--    3.使用 dependencyManagement 管理版本号-->
        <dependencyManagement></dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!-- 常用工具类 -->
            <dependency>  
                <groupId>org.apache.commons</groupId>  
                <artifactId>commons-lang3</artifactId>  
                <version>3.12.0</version>  
            </dependency>
            <dependency>  
                <groupId>org.apache.commons</groupId>  
                <artifactId>commons-collections4</artifactId>  
                <version>4.4</version>  
            </dependency>
            <dependency>  
                <groupId>commons-beanutils</groupId>  
                <artifactId>commons-beanutils</artifactId>  
                <version>1.9.4</version>  
            </dependency>
            <dependency>  
                <groupId>commons-io</groupId>  
                <artifactId>commons-io</artifactId>  
                <version>2.8.0</version>  
            </dependency>
            <dependency>  
                <groupId>com.google.guava</groupId>  
                <artifactId>guava</artifactId>  
                <version>30.1.1-jre</version>  
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    

     

  4. 修改后

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <packaging>pom</packaging>
    
    
        <groupId>com.ajlily.dev</groupId>
        <artifactId>qinjiao</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>zhuawacourse</name>
    
        <properties>
            <java.version>1.8</java.version>
            <course.version>0.0.1-SNAPSHOT</course.version>
            <!--spring依赖版本控制(和spring-boot-parent版本保持一致)-->
            <springframework.version>4.3.13.RELEASE</springframework.version>
            <!--spring-boot-parent版本号,通过spring-boot管理其他第三方依赖版本-->
            <spring.boot.version>2.2.1.RELEASE</spring.boot.version>
            <mybatisplus.version>3.2.0</mybatisplus.version>
            <jedis.version>2.9.0</jedis.version>
        </properties>
    
        <dependencyManagement>
    
            <dependencies>
                <!-- 统一管理Spring依赖 -->
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-dependencies</artifactId>
                    <version>${spring.boot.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
    
                <dependency>
                    <groupId>org.projectlombok</groupId>
                    <artifactId>lombok</artifactId>
                    <version>1.18.8</version>
                    <optional>true</optional>
                </dependency>
    
                <!--mybatis plus-->
                <dependency>
                    <groupId>com.baomidou</groupId>
                    <artifactId>mybatis-plus-boot-starter</artifactId>
                    <version>${mybatisplus.version}</version>
                </dependency>
                <dependency>
                    <groupId>com.baomidou</groupId>
                    <artifactId>mybatis-plus</artifactId>
                    <version>${mybatisplus.version}</version>
                </dependency>
                <!--MyBatis-->
                <dependency>
                    <groupId>org.mybatis.spring.boot</groupId>
                    <artifactId>mybatis-spring-boot-starter</artifactId>
                    <version>2.1.1</version>
                </dependency>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>8.0.13</version>
                </dependency>
                <dependency>
                    <groupId>p6spy</groupId>
                    <artifactId>p6spy</artifactId>
                    <version>3.8.5</version>
                </dependency>
                <!--mybatis文件生成需要-->
                <dependency>
                    <groupId>com.baomidou</groupId>
                    <artifactId>mybatis-plus-generator</artifactId>
                    <version>3.3.0</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.velocity</groupId>
                    <artifactId>velocity-engine-core</artifactId>
                    <version>2.0</version>
                </dependency>
                <!--mybatis文件生成需要-->
                <!-- 动态数据源 -->
                <dependency>
                    <groupId>com.baomidou</groupId>
                    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
                    <version>2.5.4</version>
                </dependency>
                <!--kafka-->
                <!-- https://mvnrepository.com/artifact/org.springframework.kafka/spring-kafka -->
                <dependency>
                    <groupId>org.springframework.kafka</groupId>
                    <artifactId>spring-kafka</artifactId>
                    <version>2.4.0.RELEASE</version>
                </dependency>
                <!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients -->
                <dependency>
                    <groupId>org.apache.kafka</groupId>
                    <artifactId>kafka-clients</artifactId>
                    <version>2.4.0</version>
                </dependency>
    
                <!-- 用于日志切面中,以 json 格式打印出入参 -->
                <dependency>
                    <groupId>com.google.code.gson</groupId>
                    <artifactId>gson</artifactId>
                    <version>2.8.6</version>
                </dependency>
                <dependency>
                    <groupId>redis.clients</groupId>
                    <artifactId>jedis</artifactId>
                    <version>${jedis.version}</version>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <!--统一插件配置版本管理 TODO-->
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <!--指定编译时的jdk版本-->
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    </project>

     

新建子项目

  1. New -> Module-->Maven 修改ArifactId;;取名建议-增加标识性
  2. 修改pom;去掉版本号,父项目统一管理
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <parent>
            <artifactId>lily</artifactId>
            <groupId>com.qin</groupId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>pete-service</artifactId>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>8</source>
                        <target>8</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
        <dependencies>
            <dependency>
                <groupId>com.qin</groupId>
                <artifactId>pete-persistence</artifactId>
                <version>${project.parent.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.kafka</groupId>
                <artifactId>spring-kafka</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.kafka</groupId>
                <artifactId>kafka-clients</artifactId>
            </dependency>
            <dependency>
                <groupId>com.google.code.gson</groupId>
                <artifactId>gson</artifactId>
            </dependency>
            <dependency>
                <groupId>org.testng</groupId>
                <artifactId>testng</artifactId>
                <version>RELEASE</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-test</artifactId>
            </dependency>
            <!-- aop 依赖 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
            </dependency>
    
            <!-- 用于日志切面中,以 json 格式打印出入参 -->
            <dependency>
                <groupId>com.google.code.gson</groupId>
                <artifactId>gson</artifactId>
            </dependency>
    
            <!--redis-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>${jedis.version}</version>
            </dependency>
            <!--        <dependency>-->
            <!--            <groupId>org.springframework</groupId>-->
            <!--            <artifactId>spring</artifactId>-->
            <!--            <version>2.5.6.SEC03</version>-->
            <!--            <exclusions>-->
            <!--                <exclusion>-->
            <!--                    <artifactId>commons-logging</artifactId>-->
            <!--                    <groupId>commons-logging</groupId>-->
            <!--                </exclusion>-->
            <!--            </exclusions>-->
            <!--        </dependency>-->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>com.alibaba.edas.acm</groupId>
                <artifactId>acm-sdk</artifactId>
                <version>1.0.8</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
    
        </dependencies>
    
    
    </project>

     

  3. 添加springboot相关配置文件;添加数据源,开发环境

     


jpa多数据源配置

  1. 配置文件
    spring.datasource.primary.jdbc-url=jdbc:mysql://localhost:3306/test1?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
    spring.datasource.primary.username=root
    spring.datasource.primary.password=
    spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver
    
    spring.datasource.secondary.jdbc-url=jdbc:mysql://localhost:3306/test2?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
    spring.datasource.secondary.username=root
    spring.datasource.secondary.password=
    spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver
    
    #sql\u8F93\u51FA
    spring.jpa.show-sql=true
    spring.jpa.properties.hibernate.hbm2ddl.auto=create
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
    #format\u4E00\u4E0Bsql\u8FDB\u884C\u8F93\u51FA
    spring.jpa.properties.hibernate.format_sql=true
    

     

  2. 注入DataSource

    1. package com.neo.config;
      
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties;
      import org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings;
      import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
      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;
      import java.util.Map;
      
      @Configuration
      public class DataSourceConfig {
      
          @Autowired
          private JpaProperties jpaProperties;
          @Autowired
          private HibernateProperties hibernateProperties;
      
          @Bean(name = "primaryDataSource")
          @Primary
          @ConfigurationProperties("spring.datasource.primary")
          public DataSource firstDataSource() {
              return DataSourceBuilder.create().build();
          }
      
          @Bean(name = "secondaryDataSource")
          @ConfigurationProperties("spring.datasource.secondary")
          public DataSource secondDataSource() {
              return DataSourceBuilder.create().build();
          }
      
          @Bean(name = "vendorProperties")
          public Map<String, Object> getVendorProperties() {
              return hibernateProperties.determineHibernateProperties(jpaProperties.getProperties(), new HibernateSettings());
          }
      }
      

       

    2. package com.neo.config;
      
      import java.util.Map;
      
      import javax.persistence.EntityManager;
      import javax.sql.DataSource;
      
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.beans.factory.annotation.Qualifier;
      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;
      
      @Configuration
      @EnableTransactionManagement
      @EnableJpaRepositories(
      		entityManagerFactoryRef="entityManagerFactoryPrimary",
      		transactionManagerRef="transactionManagerPrimary",
      		basePackages= { "com.neo.repository.test1" })//设置dao(repo)所在位置
      public class PrimaryConfig {
      
          @Autowired
          @Qualifier("primaryDataSource")
          private DataSource primaryDataSource;
      
          @Autowired
          @Qualifier("vendorProperties")
          private Map<String, Object> vendorProperties;
      
          @Bean(name = "entityManagerFactoryPrimary")
          @Primary
          public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary (EntityManagerFactoryBuilder builder) {
              return builder
                      .dataSource(primaryDataSource)
                      .properties(vendorProperties)
                      .packages("com.neo.model") //设置实体类所在位置
                      .persistenceUnit("primaryPersistenceUnit")
                      .build();
          }
      
          @Bean(name = "entityManagerPrimary")
          @Primary
          public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
              return entityManagerFactoryPrimary(builder).getObject().createEntityManager();
          }
      
          @Bean(name = "transactionManagerPrimary")
          @Primary
          PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {
              return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());
          }
      
      }

       

使用

package com.neo.repository.test1;

import com.neo.model.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserTest1Repository extends JpaRepository<User, Long> {
    User findById(long id);
    User findByUserName(String userName);
    User findByUserNameOrEmail(String username, String email);
}

mybatis

  • 配置文件
    mybatis.type-aliases-package=com.neo.model
    
    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=
    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=
    spring.datasource.test2.driver-class-name=com.mysql.cj.jdbc.Driver
    
    

     

  • datasource

    package com.neo.datasource;
    
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.mybatis.spring.SqlSessionTemplate;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.beans.factory.annotation.Qualifier;
    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.jdbc.datasource.DataSourceTransactionManager;
    
    import javax.sql.DataSource;
    
    /**
     * 多数据源  配置类 basePackages指定 mapper数据库
     */
    @Configuration
    @MapperScan(basePackages = "com.neo.mapper.test2", sqlSessionTemplateRef  = "test2SqlSessionTemplate")
    public class DataSource2Config {
    
        @Bean(name = "test2DataSource")
        @ConfigurationProperties(prefix = "spring.datasource.test2")
        public DataSource testDataSource() {
            return DataSourceBuilder.create().build();
        }
    
        @Bean(name = "test2SqlSessionFactory")
        public SqlSessionFactory testSqlSessionFactory(@Qualifier("test2DataSource") DataSource dataSource) throws Exception {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dataSource);
            return bean.getObject();
        }
    
        @Bean(name = "test2TransactionManager")
        public DataSourceTransactionManager testTransactionManager(@Qualifier("test2DataSource") DataSource dataSource) {
            return new DataSourceTransactionManager(dataSource);
        }
    
        @Bean(name = "test2SqlSessionTemplate")
        public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    
    }
    

     

  • package com.neo.mapper.test1;
    
    import com.neo.model.User;
    import com.neo.enums.UserSexEnum;
    import org.apache.ibatis.annotations.*;
    
    import java.util.List;
    
    public interface User1Mapper {
    
    
    	@Select("SELECT * FROM users")
    	@Results({
    			@Result(property = "userSex",  column = "user_sex", javaType = UserSexEnum.class),
    			@Result(property = "nickName", column = "nick_name")
    	})
    	List<User> getAll();
    
    	@Select("SELECT * FROM users WHERE id = #{id}")
    	@Results({
    			@Result(property = "userSex",  column = "user_sex", javaType = UserSexEnum.class),
    			@Result(property = "nickName", column = "nick_name")
    	})
    	User getOne(Long id);
    
    	@Insert("INSERT INTO users(userName,passWord,user_sex) VALUES(#{userName}, #{passWord}, #{userSex})")
    	void insert(User user);
    
    	@Update("UPDATE users SET userName=#{userName},nick_name=#{nickName} WHERE id =#{id}")
    	void update(User user);
    
    	@Delete("DELETE FROM users WHERE id =#{id}")
    	void delete(Long id);
    
    }

     

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值