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

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


相关文章
|
9天前
|
机器学习/深度学习 缓存 自然语言处理
深入解析Tiktokenizer:大语言模型中核心分词技术的原理与架构
Tiktokenizer 是一款现代分词工具,旨在高效、智能地将文本转换为机器可处理的离散单元(token)。它不仅超越了传统的空格分割和正则表达式匹配方法,还结合了上下文感知能力,适应复杂语言结构。Tiktokenizer 的核心特性包括自适应 token 分割、高效编码能力和出色的可扩展性,使其适用于从聊天机器人到大规模文本分析等多种应用场景。通过模块化设计,Tiktokenizer 确保了代码的可重用性和维护性,并在分词精度、处理效率和灵活性方面表现出色。此外,它支持多语言处理、表情符号识别和领域特定文本处理,能够应对各种复杂的文本输入需求。
49 6
深入解析Tiktokenizer:大语言模型中核心分词技术的原理与架构
|
19天前
|
Java 数据库 开发者
详细介绍SpringBoot启动流程及配置类解析原理
通过对 Spring Boot 启动流程及配置类解析原理的深入分析,我们可以看到 Spring Boot 在启动时的灵活性和可扩展性。理解这些机制不仅有助于开发者更好地使用 Spring Boot 进行应用开发,还能够在面对问题时,迅速定位和解决问题。希望本文能为您在 Spring Boot 开发过程中提供有效的指导和帮助。
69 12
|
1月前
|
Java Maven 开发者
编写SpringBoot的自定义starter包
通过本文的介绍,我们详细讲解了如何创建一个Spring Boot自定义Starter包,包括自动配置类、配置属性类、`spring.factories`文件的创建和配置。通过自定义Starter,可以有效地复用公共配置和组件,提高开发效率。希望本文能帮助您更好地理解和应用Spring Boot自定义Starter,在实际项目中灵活使用这一强大的功能。
49 17
|
1月前
|
存储 人工智能 并行计算
2025年阿里云弹性裸金属服务器架构解析与资源配置方案
🚀 核心特性与技术创新:提供100%物理机性能输出,支持NVIDIA A100/V100 GPU直通,无虚拟化层损耗。网络与存储优化,400万PPS吞吐量,ESSD云盘IOPS达100万,RDMA延迟<5μs。全球部署覆盖华北、华东、华南及海外节点,支持跨地域负载均衡。典型应用场景包括AI训练、科学计算等,支持分布式训练和并行计算框架。弹性裸金属服务器+OSS存储+高速网络综合部署,满足高性能计算需求。
|
22天前
|
JavaScript 前端开发 Java
Jeesite5:Star24k,Spring Boot 3.3+Vue3实战开源项目,架构深度拆解!让企业级项目开发效率提升300%的秘密武器
Jeesite5 是一个基于 Spring Boot 3.3 和 Vue3 的企业级快速开发平台,集成了众多优秀开源项目,如 MyBatis Plus、Bootstrap、JQuery 等。它提供了模块化设计、权限管理、多数据库支持、代码生成器和国际化等功能,极大地提高了企业级项目的开发效率。Jeesite5 广泛应用于企业管理系统、电商平台、客户关系管理和知识管理等领域。通过其强大的功能和灵活性,Jeesite5 成为了企业级开发的首选框架之一。访问 [Gitee 页面](https://gitee.com/thinkgem/jeesite5) 获取更多信息。
Jeesite5:Star24k,Spring Boot 3.3+Vue3实战开源项目,架构深度拆解!让企业级项目开发效率提升300%的秘密武器
|
2月前
|
XML Java 开发者
Spring底层架构核心概念解析
理解 Spring 框架的核心概念对于开发和维护 Spring 应用程序至关重要。IOC 和 AOP 是其两个关键特性,通过依赖注入和面向切面编程实现了高效的模块化和松耦合设计。Spring 容器管理着 Beans 的生命周期和配置,而核心模块为各种应用场景提供了丰富的功能支持。通过全面掌握这些核心概念,开发者可以更加高效地利用 Spring 框架开发企业级应用。
89 18
|
3月前
|
运维 监控 持续交付
微服务架构解析:跨越传统架构的技术革命
微服务架构(Microservices Architecture)是一种软件架构风格,它将一个大型的单体应用拆分为多个小而独立的服务,每个服务都可以独立开发、部署和扩展。
748 36
微服务架构解析:跨越传统架构的技术革命
|
3月前
|
决策智能 数据库 开发者
使用Qwen2.5+SpringBoot+SpringAI+SpringWebFlux的基于意图识别的多智能体架构方案
本项目旨在解决智能体的“超级入口”问题,通过开发基于意图识别的多智能体框架,实现用户通过单一交互入口使用所有智能体。项目依托阿里开源的Qwen2.5大模型,利用其强大的FunctionCall能力,精准识别用户意图并调用相应智能体。 核心功能包括: - 意图识别:基于Qwen2.5的大模型方法调用能力,准确识别用户意图。 - 业务调用中心:解耦框架与业务逻辑,集中处理业务方法调用,提升系统灵活性。 - 会话管理:支持连续对话,保存用户会话历史,确保上下文连贯性。 - 流式返回:支持打字机效果的流式返回,增强用户体验。 感谢Qwen2.5系列大模型的支持,使项目得以顺利实施。
745 8
使用Qwen2.5+SpringBoot+SpringAI+SpringWebFlux的基于意图识别的多智能体架构方案
|
1月前
|
传感器 监控 安全
智慧工地云平台的技术架构解析:微服务+Spring Cloud如何支撑海量数据?
慧工地解决方案依托AI、物联网和BIM技术,实现对施工现场的全方位、立体化管理。通过规范施工、减少安全隐患、节省人力、降低运营成本,提升工地管理的安全性、效率和精益度。该方案适用于大型建筑、基础设施、房地产开发等场景,具备微服务架构、大数据与AI分析、物联网设备联网、多端协同等创新点,推动建筑行业向数字化、智能化转型。未来将融合5G、区块链等技术,助力智慧城市建设。
|
3月前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
232 14

热门文章

最新文章

推荐镜像

更多