springboot高级功能(二)springboot核心架构,自定义start全解析(start中配置从数据源)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云解析 DNS,旗舰版 1个月
简介: 创建一个新的maven项目新建Properties类(相当于调用的项目传入start的参数)其中需要@ConfigurationProperties注解prefix = "login" 的意思是调用的spring boot项目 application.properties中配置的参数调用时传入的为


创建一个新的maven项目

新建Properties类(相当于调用的项目传入start的参数)

其中需要@ConfigurationProperties注解

prefix = "login" 的意思是调用的spring boot项目 application.properties中配置的参数

调用时传入的为

1. login.className = com.mysql.jdbc.Driver
2. login.url=jdbc:mysql://localhost:3306/humanresource?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
3. login.user=root
4. login.password=root
1. @ConfigurationProperties(prefix = "login")
2. public class LoginCheckProperties {
3. 
4. private String className;
5. private String url;
6. private String user;
7. private String password;
8. 
9. public String getClassName() {
10. return className;
11.     }
12. 
13. public void setClassName(String className) {
14. this.className = className;
15.     }
16. 
17. public String getUrl() {
18. return url;
19.     }
20. 
21. public void setUrl(String url) {
22. this.url = url;
23.     }
24. 
25. public String getUser() {
26. return user;
27.     }
28. 
29. public void setUser(String user) {
30. this.user = user;
31.     }
32. 
33. public String getPassword() {
34. return password;
35.     }
36. 
37. public void setPassword(String password) {
38. this.password = password;
39.     }
40. }

Config类

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

1. @Configuration
2. @EnableConfigurationProperties(LoginCheckProperties.class)
3. @MapperScan(basePackages = MasterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "masterSqlSessionFactory")
4. public class MasterDataSourceConfig {
5. 
6. // 精确到 master 目录,以便跟其他数据源隔离
7. static final String PACKAGE = "com.airboot.bootdemo.dao.master";
8. static final String MAPPER_LOCATION = "classpath*:mapper/master/*.xml";
9. 
10. private String className;
11. private String url;
12. private String user;
13. private String password;
14. 
15. public MasterDataSourceConfig(LoginCheckProperties loginCheckProperties) {
16. this.className = loginCheckProperties.getClassName();
17. this.url = loginCheckProperties.getUrl();
18. this.user = loginCheckProperties.getUser();
19. this.password = loginCheckProperties.getPassword();
20.     }
21. 
22. @Bean(name = "masterDataSource")
23. public DataSource masterDataSource() {
24. DruidDataSource dataSource = new DruidDataSource();
25.         dataSource.setDriverClassName(className);
26.         dataSource.setUrl(url);
27.         dataSource.setUsername(user);
28.         dataSource.setPassword(password);
29. //dataSource.setDriverClassName("com.mysql.jdbc.Driver");
30. //dataSource.setUrl("jdbc:mysql://localhost:3306/humanresource?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC");
31. //dataSource.setUsername("root");
32. //dataSource.setPassword("root");
33. return dataSource;
34.     }
35. 
36. @Bean(name = "masterTransactionManager")
37. 
38. public DataSourceTransactionManager masterTransactionManager() {
39. return new DataSourceTransactionManager(masterDataSource());
40.     }
41. 
42. @Bean(name = "masterSqlSessionFactory")
43. public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource)
44. throws Exception {
45. final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
46.         sessionFactory.setDataSource(masterDataSource);
47.         sessionFactory.setMapperLocations(
48. new PathMatchingResourcePatternResolver().getResources(MasterDataSourceConfig.MAPPER_LOCATION));
49. return sessionFactory.getObject();
50.     }
51. 
52. 
53. }

META-INF/spring.factories

最后在resources中新建文件夹META-INF,在其中建立文件spring.factories.路径为上文Config中的路径

org.springframework.boot.autoconfigure.EnableAutoConfiguration=logincheckspringbootstarter.config.ds.MasterDataSourceConfig

如果要暴露多个使用以下代码

1. org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
2. com.*.*.*.*Util,\
3. com.*.*.*.*Util,\
4. com.*.*.*.*Util,\
5. com.*.*.*.*Util,\
6. com.*.*.*.*Util

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

1. <build>
2. <plugins>
3. <plugin>
4. <groupId>org.apache.maven.plugins</groupId>
5. <artifactId>maven-source-plugin</artifactId>
6. <version>2.4</version>
7. <configuration>
8. <aggregate>true</aggregate>
9. </configuration>
10. <executions>
11. <execution>
12. <id>attach-javadocs</id>
13. <goals>
14. <goal>jar</goal>
15. </goals>
16. <configuration>
17. <additionalparam>-Xdoclint:none</additionalparam>
18. </configuration>
19. </execution>
20. </executions>
21. </plugin>
22. </plugins>
23. </build>

打包

使用命令mvn install

引入jar包

其中groupId 公司名称 我这里是cn.baocl

      artifactId为项目名

这些在start项目的pom文件中配置

上一下pom文件

1. <?xml version="1.0" encoding="UTF-8"?>
2. <project xmlns="http://maven.apache.org/POM/4.0.0"
3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5. <modelVersion>4.0.0</modelVersion>
6. 
7. <groupId>cn.baocl</groupId>
8. <artifactId>check-spring-boot-starter</artifactId>
9. <version>1.1-SNAPSHOT</version>
10. 
11. <dependencies>
12. <dependency>
13. <groupId>org.springframework.boot</groupId>
14. <artifactId>spring-boot-starter-web</artifactId>
15. <version>2.2.1.RELEASE</version>
16. </dependency>
17. 
18. <dependency>
19. <groupId>org.mybatis.spring.boot</groupId>
20. <artifactId>mybatis-spring-boot-starter</artifactId>
21. <version>1.3.2</version>
22. </dependency>
23. <!-- Druid 数据连接池依赖 -->
24. <dependency>
25. <groupId>com.alibaba</groupId>
26. <artifactId>druid</artifactId>
27. <version>1.1.17</version>
28. </dependency>
29. 
30. <dependency>
31. <groupId>org.springframework.boot</groupId>
32. <artifactId>spring-boot-devtools</artifactId>
33. <scope>runtime</scope>
34. <version>2.2.1.RELEASE</version>
35. </dependency>
36. 
37. <dependency>
38. <groupId>mysql</groupId>
39. <artifactId>mysql-connector-java</artifactId>
40. <scope>runtime</scope>
41. <version>8.0.16</version>
42. </dependency>
43. 
44. <dependency>
45. <groupId>org.springframework.boot</groupId>
46. <artifactId>spring-boot-configuration-processor</artifactId>
47. <optional>true</optional>
48. <version>2.2.1.RELEASE</version>
49. </dependency>
50. </dependencies>
51. 
52. </project>
1. <dependency>
2. <groupId>cn.baocl</groupId>
3. <artifactId>check-spring-boot-starter</artifactId>
4. <version>1.1-SNAPSHOT</version>
5. </dependency>

使用

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

com.airboot.bootdemo.dao.master,classpath*:mapper/master/*.xml

这两个路径文件使用的就是start中的配置的数据源

阿里多数据源配置的博客请参考:

项目结构

image.png


相关文章
|
12天前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
57 6
|
12天前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
29 1
|
8天前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
28 0
|
12天前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
26 2
 SpringBoot入门(7)- 配置热部署devtools工具
|
3天前
|
存储 前端开发 JavaScript
springboot中路径默认配置与重定向/转发所存在的域对象
Spring Boot 提供了简便的路径默认配置和强大的重定向/转发机制,通过合理使用这些功能,可以实现灵活的请求处理和数据传递。理解并掌握不同域对象的生命周期和使用场景,是构建高效、健壮 Web 应用的关键。通过上述详细介绍和示例,相信读者能够更好地应用这些知识,优化自己的 Spring Boot 应用。
12 3
|
11天前
|
Java 数据库连接
SpringBoot配置多数据源实战
第四届光学与机器视觉国际学术会议(ICOMV 2025) 2025 4th International Conference on Optics and Machine Vision
39 8
|
9天前
|
Java 数据库连接 数据库
springboot启动配置文件-bootstrap.yml常用基本配置
以上是一些常用的基本配置项,在实际应用中可能会根据需求有所变化。通过合理配置 `bootstrap.yml`文件,可以确保应用程序在启动阶段加载正确的配置,并顺利启动运行。
16 2
|
13天前
|
Kubernetes Cloud Native 云计算
云原生技术深度解析:重塑企业IT架构的未来####
本文深入探讨了云原生技术的核心理念、关键技术组件及其对企业IT架构转型的深远影响。通过剖析Kubernetes、微服务、容器化等核心技术,本文揭示了云原生如何提升应用的灵活性、可扩展性和可维护性,助力企业在数字化转型中保持领先地位。 ####
|
14天前
|
运维 Kubernetes Cloud Native
Kubernetes云原生架构深度解析与实践指南####
本文深入探讨了Kubernetes作为领先的云原生应用编排平台,其设计理念、核心组件及高级特性。通过剖析Kubernetes的工作原理,结合具体案例分析,为读者呈现如何在实际项目中高效部署、管理和扩展容器化应用的策略与技巧。文章还涵盖了服务发现、负载均衡、配置管理、自动化伸缩等关键议题,旨在帮助开发者和运维人员掌握利用Kubernetes构建健壮、可伸缩的云原生生态系统的能力。 ####
|
17天前
|
机器学习/深度学习 人工智能 自然语言处理
医疗行业的语音识别技术解析:AI多模态能力平台的应用与架构
AI多模态能力平台通过语音识别技术,实现实时转录医患对话,自动生成结构化数据,提高医疗效率。平台具备强大的环境降噪、语音分离及自然语言处理能力,支持与医院系统无缝集成,广泛应用于门诊记录、多学科会诊和急诊场景,显著提升工作效率和数据准确性。

推荐镜像

更多
下一篇
无影云桌面