springboot自定义start解析(start中配置从数据源)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云解析 DNS,旗舰版 1个月
简介: 在springboot相比于springmvc提供了一个极为重要的功能,就是自定义start(自定义jar包),同时spring也提供了一大波start。如spring-boot-starter-data-redis,spring-boot-starter-amqp。本文将教你如何自定义start。例子为从start中获取数据源。


image.png

 在springboot相比于springmvc提供了一个极为重要的功能,就是自定义start(自定义jar包),同时spring也提供了一大波start。如spring-boot-starter-data-redis,spring-boot-starter-amqp。本文将教你如何自定义start。例子为从start中获取数据源。

1.自定义start能干什么

在架构考虑时,或许有一些通用方法抽取成start,在项目中使用时,直接引入即可。

2.创建自定义start

1.创建一个新的maven项目

创建一个普通的maven项目,作为start的开发环境

2.新建application.properties

在maven中创建application.properties文件。同时添加以下代码,作为常量配置。

login.className = com.mysql.jdbc.Driver
login.url=jdbc:mysql://localhost:3306/humanresource?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
login.user=root
login.password=root

3.创建LoginCheckProperties

创建类LoginCheckProperties,其中需要@ConfigurationProperties注解,prefix = “login” 的意思是调用项目中 ,application.properties中配置的参数。

@ConfigurationProperties(prefix = "login")
public class LoginCheckProperties {
    private String className;
    private String url;
    private String user;
    private String password;
    public String getClassName() {
        return className;
    }
    public void setClassName(String className) {
        this.className = className;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getUser() {
        return user;
    }
    public void setUser(String user) {
        this.user = user;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

4.Config类

其中@EnableConfigurationProperties(LoginCheckProperties.class) 注解为固定写法,意义是实现自动配置上文中的Properties类。

@Configuration
@EnableConfigurationProperties(LoginCheckProperties.class)
@MapperScan(basePackages = MasterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterDataSourceConfig {
    // 精确到 master 目录,以便跟其他数据源隔离
    static final String PACKAGE = "com.airboot.bootdemo.dao.master";
    static final String MAPPER_LOCATION = "classpath*:mapper/master/*.xml";
    private String className;
    private String url;
    private String user;
    private String password;
    public MasterDataSourceConfig(LoginCheckProperties loginCheckProperties) {
        this.className = loginCheckProperties.getClassName();
        this.url = loginCheckProperties.getUrl();
        this.user = loginCheckProperties.getUser();
        this.password = loginCheckProperties.getPassword();
    }
    @Bean(name = "masterDataSource")
    public DataSource masterDataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(className);
        dataSource.setUrl(url);
        dataSource.setUsername(user);
        dataSource.setPassword(password);
        return dataSource;
    }
    @Bean(name = "masterTransactionManager")
    public DataSourceTransactionManager masterTransactionManager() {
        return new DataSourceTransactionManager(masterDataSource());
    }
    @Bean(name = "masterSqlSessionFactory")
    public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource)
            throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(masterDataSource);
        sessionFactory.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources(MasterDataSourceConfig.MAPPER_LOCATION));
        return sessionFactory.getObject();
    }  
}

5.添加META-INF/spring.factories

最后在resources中新建文件夹META-INF,在其中建立文件spring.factories路径为上文Config中的路径。(需要向被引用者暴露)

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.*.*.*.*A,\
com.*.*.*.*B,\
com.*.*.*.*C,\
com.*.*.*.*D,\
com.*.*.*.*Util

6.显示start注释(选读)

如果想要在jar中加入注释 则需要在pom文件中修改以下代码 这样会生成一个 .jar 和一个:source.jar 需要将这两个jar包都加入项目中。

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <aggregate>true</aggregate>
                </configuration>
                <executions>
                    <execution>
                        <id>attach-javadocs</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                        <configuration>
                            <additionalparam>-Xdoclint:none</additionalparam>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

7.打包

使用命令mvn install。即可生成jar包。

8.引入jar包

       <dependency>
            <groupId>cn.baocl</groupId>
            <artifactId>check-spring-boot-starter</artifactId>
            <version>1.1-SNAPSHOT</version>
        </dependency>

在引用项目中的pom文件配置groupId,artifactId,version即可。下文为start中的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">
    <modelVersion>4.0.0</modelVersion>
    <groupId>cn.baocl</groupId>
    <artifactId>check-spring-boot-starter</artifactId>
    <version>1.1-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <!-- Druid 数据连接池依赖 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.17</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <version>2.2.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
            <version>8.0.16</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
            <version>2.2.1.RELEASE</version>
        </dependency>
    </dependencies>
</project>

9.使用

然后就可以使用了,本文实现的为主项目定义一个从数据源。所以在主项目中就可以使用上文定义的数据源啦。

10.项目结构

image.png


相关文章
|
21天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
175 37
|
7天前
|
存储 缓存 Java
在Spring Boot中使用缓存的技术解析
通过利用Spring Boot中的缓存支持,开发者可以轻松地实现高效和可扩展的缓存策略,进而提升应用的性能和用户体验。Spring Boot的声明式缓存抽象和对多种缓存技术的支持,使得集成和使用缓存变得前所未有的简单。无论是在开发新应用还是优化现有应用,合理地使用缓存都是提高性能的有效手段。
14 1
|
8天前
|
Java Spring
springboot 集成 swagger 2.x 和 3.0 以及 Failed to start bean ‘documentationPluginsBootstrapper‘问题的解决
本文介绍了如何在Spring Boot项目中集成Swagger 2.x和3.0版本,并提供了解决Swagger在Spring Boot中启动失败问题“Failed to start bean ‘documentationPluginsBootstrapper’; nested exception is java.lang.NullPointerEx”的方法,包括配置yml文件和Spring Boot版本的降级。
springboot 集成 swagger 2.x 和 3.0 以及 Failed to start bean ‘documentationPluginsBootstrapper‘问题的解决
|
2月前
|
前端开发 数据可视化 Java
SpringBoot的4中常见入参形式错误解析
在使用SpringBoot进行前后端接口对接时,常遇到如500、400等请求错误,本文总结了四个常见的复杂请求类型及其解决方案,包括实体嵌套List提交、普通文件上传、List提交及数组Array提交,详细展示了正确的前端与后端代码实现,帮助开发者避免常见错误,提高开发效率。
40 0
SpringBoot的4中常见入参形式错误解析
|
2月前
|
域名解析 网络协议 API
【API管理 APIM】APIM集成内部VNet时,常遇见的关于自定义DNS服务问题。
【API管理 APIM】APIM集成内部VNet时,常遇见的关于自定义DNS服务问题。
|
3月前
|
Java Spring 容器
Spring Boot 启动源码解析结合Spring Bean生命周期分析
Spring Boot 启动源码解析结合Spring Bean生命周期分析
87 11
|
2月前
|
XML Java 应用服务中间件
SpringBoot启动流程解析
SpringBoot启动流程解析
32 0
|
2月前
|
网络协议 微服务
【Azure 微服务】基于已经存在的虚拟网络(VNET)及子网创建新的Service Fabric并且为所有节点配置自定义DNS服务
【Azure 微服务】基于已经存在的虚拟网络(VNET)及子网创建新的Service Fabric并且为所有节点配置自定义DNS服务
|
2月前
|
域名解析 缓存 负载均衡
在Linux中,自定义解析域名的时候,可以编辑哪个⽂件?是否可以⼀个ip对应多个域名?是否⼀个域名对应多个ip?
在Linux中,自定义解析域名的时候,可以编辑哪个⽂件?是否可以⼀个ip对应多个域名?是否⼀个域名对应多个ip?
|
4月前
|
Java 编译器 Maven
SpringBoot(二)之parent解析
默认配置spring-boot-maven-plugin,简化构建spring-boot的构建流程。
75 1

推荐镜像

更多
下一篇
无影云桌面