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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
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


相关文章
|
5天前
|
监控 数据挖掘 BI
探索项目管理系统:解析五大功能,洞悉项目成功的关键
项目新手常忽视管理系统的价值,而高手已借助系统实现规划清晰。优秀的项目管理系统必备五大功能:项目WBS分解、图表报表、工时管理、团队协作和任务自动化。WBS能将复杂项目拆分成可管理任务,明确责任,评估时间和资源需求,便于跟踪进度。Zoho Projects作为示例,支持创建任务层级,利用甘特图和资源利用图监控进度和资源分配,工时管理则帮助控制项目时间和成本。同时,系统促进团队协作,如通过即时通讯和知识库增强团队凝聚力,而任务自动化则减少错误,提升效率。
22 1
|
3天前
|
移动开发 供应链 Java
企业级智能制造MES系统源码,技术架构:springboot + vue-element-plus-admin
企业级智能制造MES系统源码,技术架构:springboot + vue-element-plus-admin。 企业级云MES全套源码,支持app、小程序、H5、台后管理。 生产调度:MES系统可以根据生产订单和资源状况,自动计算生产计划和调度,从而优化生产线的运作。
企业级智能制造MES系统源码,技术架构:springboot + vue-element-plus-admin
|
5天前
|
开发框架 前端开发 开发者
【Uniapp 专栏】Uniapp 的状态管理功能深度解析
【5月更文挑战第13天】Uniapp 的状态管理对于构建复杂跨平台应用至关重要,它包括全局变量、Vuex 风格管理。核心概念有 State、Actions 和 Mutations。通过状态定义、动作设计和突变管理,提高开发效率和代码可维护性。实际案例和与其他框架比较显示了 Uniapp 的优势。理解并有效利用状态管理,能提升应用质量和开发效率。
【Uniapp 专栏】Uniapp 的状态管理功能深度解析
|
5天前
|
弹性计算 数据库 Docker
学习阿里云架构设计知识2-wp搭建及配置
VPC分区清晰架构,VSW网络分隔,CEN连通VPC,按量付费小规格,均衡策略,ESS/ACK内置SNAT,ECS用NAT上网。建DMZ需VPC、VSW、NAT、EIP。主系统多VPC/VSW配ECS和Redis,CEN全连接。CEN设路由表,外网访问设DMZ、CEN、EIP,加堡垒机。Web系统ACR部署WordPress,配数据库。验证WordPress、弹性伸缩,测外访、发文、负载。含架构图。
33 1
学习阿里云架构设计知识2-wp搭建及配置
|
5天前
|
前端开发 Java 关系型数据库
Java医院绩效考核系统源码B/S架构+springboot三级公立医院绩效考核系统源码 医院综合绩效核算系统源码
作为医院用综合绩效核算系统,系统需要和his系统进行对接,按照设定周期,从his系统获取医院科室和医生、护士、其他人员工作量,对没有录入信息化系统的工作量,绩效考核系统设有手工录入功能(可以批量导入),对获取的数据系统按照设定的公式进行汇算,且设置审核机制,可以退回修正,系统功能强大,完全模拟医院实际绩效核算过程,且每步核算都可以进行调整和参数设置,能适应医院多种绩效核算方式。
31 2
|
5天前
|
关系型数据库 MySQL 数据库
MySQL集群 双主架构(配置命令)
MySQL集群 双主架构(配置命令)
|
5天前
|
缓存 测试技术 Android开发
深入了解Appium:Capability 高级配置技巧解析
Appium 提供多种进阶配置项以优化自动化测试,如 deviceName 作为设备别名,udid 确保选择特定设备,newCommandTimeout 设置超时时间,PRINT_PAGE_SOURCE_ON_FIND_FAILURE 在错误时打印页面源,以及测试策略中的 noReset、shouldTerminateApp 和 forceAppLaunch 控制应用状态和重启。这些配置可提升测试效率和准确性。
18 2
|
5天前
|
存储 弹性计算 固态存储
阿里云服务器配置选择指南,2024年全解析
阿里云服务器配置选择涉及CPU、内存、带宽和磁盘。个人开发者或中小企业推荐使用轻量应用服务器或ECS经济型实例,如2核2G3M配置,适合网站和轻量应用。企业用户则应选择企业级独享型ECS,如计算型c7、通用型g7,至少2核4G起,带宽建议5M,系统盘考虑SSD云盘或ESSD云盘以保证性能。阿里云提供了多种实例类型和配置,用户需根据实际需求进行选择。
|
5天前
|
安全 前端开发 Java
10:基于Servlet模拟用户登录功能的实现与解析-Java Web
10:基于Servlet模拟用户登录功能的实现与解析-Java Web
26 3
|
5天前
|
分布式计算 DataWorks 调度
DataWorks操作报错合集之DataWorks配置参数在开发环境进行调度,参数解析不出来,收到了 "Table does not exist" 的错误,该怎么处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
25 0

推荐镜像

更多
http://www.vxiaotou.com