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

小鲍侃java 小鲍侃java     2023-03-07     160

关键词:


​在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.项目结构

springboot自动装配原理及自定义start开发(代码片段)

SpringBoot自动装配原理及自定义start开发前言:    大部分互联网公司都是使用SpringBoot,或SpringCloud作为开发框架。在我们开发中,很可能遇到要开发公共组件提供给其他人调用的场景。随着项目版本的迭代,很... 查看详情

springboot自定义参数解析器(代码片段)

springboot自定义参数解析器1.前言2.springMVC参数解析器3.如何自定义参数解析器4测试1.前言1.springMVC是如何把参数解析完毕后注入到controller方法参数上的呢?在javaweb阶段,我们都学过使用HttpServletRequest这个对象获取参数࿰... 查看详情

springboot自定义starter

1,创建一个空工程2,new一个Modules ----------------maven(启动器):springboottest-spring-boot-starter3,new一个Modules ----------------spring(做自动配置的):springboottest-spring-boot-starter-autoconfigurer4,启动器pom文件 查看详情

springboot源码解析##如何自定义starter让springboot扫描到你的配置

  配置factories文件,然后让spring去扫描到  查看详情

210630:springboot自动配置-自定义start

参考技术ASpringBoot关于自动配置的源码在spring-boot-autoconfigure-x.x.x.x.jar中:当然,自动配置原理的相关描述,官方文档貌似是没有提及。不过我们不难猜出,SpringBoot的启动类上有一个@SpringBootApplication注解,这个注解是SpringBoot项目... 查看详情

springboot自定义xml文件解析

...我们自定义的xml文件格式和xml文件解析处理器。新建一个Springboot工程,pom如下。SelfDefineXmlTrial/pom.xml:然后,新建一个用于测试controller。com.lfqy.springboot.selfdefxml.controller.SelfDefXmlController:最后,创建一个Springboot的启动类。com.lfqy... 查看详情

springboot源码解析-自定义系统初始化器

...能不能看到,我就不管了,哈哈概述  本系列主要分析springboot启动过程中干了什么事情,尽量以白话的形式写出来,因为本人也很小白,望包涵。  系统初始化器是spr 查看详情

springboot–自定义propertyeditor

前言PropertyEditor最初是属于JavaBean规范定义的,有意思的是,Spring也大规模的使用了PropertyEditors,以便实现以各种形式展现对象的属性;举个例子,常见的用于解析Http请求参数,通常需要在展现层把原始Java对象解析成对人友好的... 查看详情

自定义服务(代码片段)

linux自定义服务并设置开机自启动【init.d】服务脚本#!/bin/sh#chkconfig:23458005#description:api-serverstart() nohupjava-jar./stop() status() `ps-ef|grep`case$1instart) start ;;stop) stop ;;restart) stop sleep1 star 查看详情

如何禁用 TomcatServletWebServerFactory 的 SpringBoot 自动配置以便自定义 spring-starter 提供它?

】如何禁用TomcatServletWebServerFactory的SpringBoot自动配置以便自定义spring-starter提供它?【英文标题】:HowtodisableSpringBootautoconfigurationforTomcatServletWebServerFactoryinorderforacustomspring-startertoprovideit?【发布时间】:2020-03-0807:46:49【问 查看详情

自定义字典以维护它的 __getitem__ on ** (star-star-unpacking)

】自定义字典以维护它的__getitem__on**(star-star-unpacking)【英文标题】:Customdictionarytomaintainit\'s__getitem__on**(star-star-unpacking)【发布时间】:2018-12-2414:17:34【问题描述】:祝大家圣诞快乐我正在实现一个允许属性访问的自定义字典,... 查看详情

spring源码解析-自定义标签解析和spi机制-3

...时加载到缓存,最初的版本是jdk中实现的,后来在spring、springboot、dubbo中都有相应的使用。3.JDK的SPI机制:META-INF下 查看详情

springboot下validation自定义验证注解(简单实现)(代码片段)

首先引入validation依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>自定义解析器importjavax.validat 查看详情

自定义 RatingView IOS 中未显示 Star-Half 图像

】自定义RatingViewIOS中未显示Star-Half图像【英文标题】:Star-HalfimageisnotdisplayinginCustomRatingViewIOS【发布时间】:2015-01-2011:36:42【问题描述】:我正在使用本教程http://www.raywenderlich.com/1768/uiview-tutorial-for-ios-how-to-make-a-custom-uiview-in-io 查看详情

面试题:springboot的自启动原理

引言不论在工作中,亦或是求职面试,SpringBoot已经成为我们必知必会的技能项。除了比较老旧的政府项目或金融项目依旧使用如SSM或SSH做单体框架开发项目外,如今的各行各业基于项目的快速开发与发布、迭代更新,都在逐渐... 查看详情

springboot入门到精通-springboot自定义starter(代码片段)

定义自己的starterSpringBoot入门到精通-Spring的注解编程(一)SpringBoot入门到精通-SpringBoot入门(二)SpringBoot入门到精通-Spring的基本使用(三)SpringBoot入门到精通-SpringBoot集成SSM(四)SpringBoot入门到精通-SpringBoot自动配置原理(五)SpringBoot入门... 查看详情

spring中自定义session管理,springsession源码解析(代码片段)

系列文章:SpringBoot学习大纲,可以留言自己想了解的技术点目录系列文章:SpringBoot学习大纲,可以留言自己想了解的技术点1、session是什么?1>session在哪里?2>服务器怎么知道每次说话的是哪个session3&... 查看详情

springboot2——指标监控actuator多环境切换profile和自定义starter(代码片段)

SpringBoot2——指标监控actuator、多环境切换Profile和自定义starter一、SpringBootActuator1.1SpringBootActuator的使用1.2Endpoints1.2.1端点暴露配置1.2.2重要端点解析二、多环境切换Profile2.1多配置文件2.2yaml的多文档块2.3配置文件的加载顺序三、自... 查看详情