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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,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


相关文章
|
23天前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
36 4
|
20天前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
31 0
|
10天前
|
安全 Java 测试技术
🎉Java零基础:全面解析枚举的强大功能
【10月更文挑战第19天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
96 60
|
7天前
|
Java Spring 容器
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
28 3
|
12天前
|
域名解析 存储 缓存
DNS是什么?内网电脑需要配置吗?
【10月更文挑战第22天】DNS是什么?内网电脑需要配置吗?
45 1
|
18天前
|
druid Java Maven
|
25天前
|
机器学习/深度学习 调度
mmseg配置解析 Polynomial Decay 多项式衰减
Polynomial Decay(多项式衰减)是一种常用的学习率调度方法,通过多项式函数逐步减少学习率,帮助模型更好地收敛。公式为:\[ lr = (lr_{initial} - \eta_{min}) \times \left(1 - \frac{current\_iter}{max\_iters}\right)^{power} + \eta_{min} \]。参数包括初始学习率、最小学习率、当前迭代次数、总迭代次数和衰减指数。适用于需要平滑降低学习率的场景,特别在训练后期微调模型参数。
48 0
mmseg配置解析 Polynomial Decay 多项式衰减
|
6天前
|
供应链 安全 BI
CRM系统功能深度解析:为何这些平台排名靠前
本文深入解析了市场上排名靠前的CRM系统,如纷享销客、用友CRM、金蝶CRM、红圈CRM和销帮帮CRM,探讨了它们在功能性、用户体验、集成能力、数据安全和客户支持等方面的优势,以及如何满足企业的关键需求,助力企业实现数字化转型和业务增长。
|
10天前
|
数据管理 Nacos 开发者
"Nacos架构深度解析:一篇文章带你掌握业务层四大核心功能,服务注册、配置管理、元数据与健康检查一网打尽!"
【10月更文挑战第23天】Nacos 是一个用于服务注册发现和配置管理的平台,支持动态服务发现、配置管理、元数据管理和健康检查。其业务层包括服务注册与发现、配置管理、元数据管理和健康检查四大核心功能。通过示例代码展示了如何在业务层中使用Nacos,帮助开发者构建高可用、动态扩展的微服务生态系统。
38 0

推荐镜像

更多