# leo-springboot-javafx
**Repository Path**: wangss3/leo-springboot-javafx
## Basic Information
- **Project Name**: leo-springboot-javafx
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2020-09-04
- **Last Updated**: 2024-01-31
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# springboot整合javafx项目脚手架
[](https://gitee.com/wangss3/leo-springboot-javafx) [](https://gitee.com/wangss3/leo-springboot-javafx)
>本专栏是作者leo使用```JavaFx```、```SpringBoot```、```Mysql```等技术栈和偏向于DDD领域驱动设计方式,搭建的模板项目。如果本项目能为您提供帮助,请给予支持(关注、点赞、分享)!
> **作者:** leo,Java Developer,[:leo: CSDN 李白与孟浩然](https://blog.csdn.net/wang521qian/)
**如何支持:**
- 关注公众号 [bugstack虫洞栈](https://itstack.org/_media/qrcode.png?x-oss-process=style/may)
- 点击右上角Star :star: 给予关注
- 赏个鸡腿🍗
---
雨后天晴写下、年华,
巫山云景彩霞、如画。
心似平远走**码**、飞驾,
整装年少风华、正恰。
搭建基础脚手架,方便后续快速开发,框架中主要集成springboot、javafx、常用jar、封装的工具类
## 一、工程源码
**源码地址**:
- [https://gitee.com/wangss3/leo-springboot-javafx](https://gitee.com/wangss3/leo-springboot-javafx)
## 二、项目架构
**目录结构**:

**引入功能**:
- springboot 2.3.3
- springboot-javafx-support 2.1.6 springboot对javafx的支持
- javafx-maven-plugin 8.8.3 打包工具
- commons-lang3 常用工具类、commons-io io操作工具类
**打成exe步骤**:
- [需要 innosetup-5.6.1.exe 安装文件](https://files.jrsoftware.org/is/5/)
- [需要 wix311.exe 安装文件](https://github.com/wixtoolset/wix3/releases/tag/wix3112rtm)
- 安装以后需要配置环境变量,如下:```C:\Program Files (x86)\Inno Setup 5``` 和 ```C:\Program Files (x86)\WiX Toolset v3.11\bin```
- 环境准备完成以后,使用命令:mvn jfx:native 进行exe文件生成

## 三、引入组件
**log4j2日志组件引入**:
springboot默认是使用logback来进行日志记录,本项目使用log4j2来记录日志,为避免冲突,需要在pom中排除logback。
```
org.springframework.boot
spring-boot-starter
spring-boot-starter-logging
org.springframework.boot
```
也要注意其他jar中是否有引入。
引入log4j2依赖:
```
org.springframework.boot
spring-boot-starter-log4j2
```
在src/main/resources/添加配置文件log4j2.xml,项目启动时log4j2会自动到这个目录加载。
也可以在application.properties中配置路径:```logging.config=classpath:log4j2.xml```
使用案例:
- @Slf4j
- private static final org.slf4j.Logger LOGGER = org.slf4j.LoggerFactory.getLogger(***.class);
---
异步日志的配置方式:
- 引入disruptor并发包
```
com.lmax
disruptor
3.4.2
```
- 增加log4j2.component.properties配置文件,启用异步属性
- 在application.properties文件中指定使用的日志文件为:log4j2-async.xml ```logging.config=classpath:log4j2-async.xml```
- 使用```log.info("是否为异步日志:{}", AsyncLoggerContextSelector.isSelected());``` 语句判断是否开启异步日志
---
**springboot-javafx-support组件引入**:
```
de.roskenet
springboot-javafx-support
${springboot-javafx-support.version}
```
使用方法:
```
@SpringBootApplication
@Slf4j
public class LeoSpringbootJavafxApplication extends AbstractJavaFxApplicationSupport {
public static void main(String[] args) {
// DemoStageView视图类,CustomSplash启动动画类
launch(LeoSpringbootJavafxApplication.class, DemoStageView.class, new CustomSplash(), args);
}
@Override
public void start(Stage stage) throws Exception {
super.start(stage);
}
}
```
**druid连接池引入**:
本项目采用阿里的druid连接池进行数据库连接管理,引入jar如下:其中需要注意的是剔除springboot默认连接池HikariCP
```
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.1.3
HikariCP
com.zaxxer
com.alibaba
druid-spring-boot-starter
1.1.23
mysql
mysql-connector-java
5.1.46
com.oracle
ojdbc6
6.0
```
druid配置数据库和参数设置:
```
# Spring Boot的数据源配置的默认类型是org.apache.tomcat.jdbc.pool.Datasource
#配置druid连接池
#mysql数据源
spring.datasource.druid.mysql.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.mysql.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.druid.mysql.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&rewriteBatchedStatements=true&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull
spring.datasource.druid.mysql.username=root
spring.datasource.druid.mysql.password=root
#oracle数据源
spring.datasource.druid.oracle.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.oracle.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.druid.oracle.url=jdbc:oracle:thin:@localhost:1521:ORCL
spring.datasource.druid.oracle.username=test
spring.datasource.druid.oracle.password=test
# 连接池配置
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-active=20
# 连接等待超时时间
spring.datasource.druid.max-wait=30000
# 配置检测可以关闭的空闲连接间隔时间
spring.datasource.druid.time-between-eviction-runs-millis=60000
# 配置连接在池中的最小生存时间
spring.datasource.druid.min-evictable-idle-time-millis=300000
#用来检测连接是否有效的sql 必须是一个查询语句
#mysql中为 select 'x'
#oracle中为 select 1 from dual
spring.datasource.druid.validation-query=select 'x'
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
#当数据库抛出不可恢复的异常时,抛弃该连接
spring.datasource.druid.exception-sorter=true
# 打开PSCache,并且指定每个连接上PSCache的大小
#是否缓存preparedStatement,mysql5.5+建议开启
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-open-prepared-statements=20
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
# 配置监控统计拦截的filters, 去掉后监控界面sql无法统计, 'wall'用于防火墙
spring.datasource.druid.filters=stat,wall
#通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.druid.connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
#合并多个DruidDataSource的监控数据
spring.datasource.druid.use-global-data-source-stat=true
# Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔
spring.datasource.druid.aop-patterns=com.leo.servie.*
# WebStatFilter配置
spring.datasource.druid.web-stat-filter.enabled=true
# 添加过滤规则
spring.datasource.druid.web-stat-filter.url-pattern=/*
# 忽略过滤的格式
spring.datasource.druid.web-stat-filter.exclusions='*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
# StatViewServlet配置
spring.datasource.druid.stat-view-servlet.enabled=true
# 访问路径为/druid时,跳转到StatViewServlet
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
# 是否能够重置数据
spring.datasource.druid.stat-view-servlet.reset-enable=false
# 需要账号密码才能访问控制台
spring.datasource.druid.stat-view-servlet.login-username=druid
spring.datasource.druid.stat-view-servlet.login-password=druid123
# IP白名单
#spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
# IP黑名单(共同存在时,deny优先于allow)
# spring.datasource.druid.stat-view-servlet.deny=192.168.1.218
# 配置StatFilter
spring.datasource.druid.filter.stat.log-slow-sql=true
```
在启动类中排除druid自动加载的bean,否则项目启动会报错:```@SpringBootApplication(exclude = {DruidDataSourceAutoConfigure.class})``
增加配置类,加载创建数据库连接,可参考:com.leo.base.db.config.DynamicDataSourceConfig.java
## 四、功能概述
**自路由功能**:
根据业务不同,数据体量不同,目前市面上多使用多数据源:
- 主从分离
- 既有oracle数据库也有mysql数据库
- 多数据源
等情况,所以自己实现了动态路由功能,在包com.leo.base.db下实现,其中包含五个注解,如有需要可以自行修改增加:
- @DynamicDataSource 动态路由,指定数据源,适用于增删改查,使用方式在方法上增加注解,并指定数据源:```@DynamicDataSource(value = "mysql")```
- @GlobalDataSource 全局路由,适用于全局表,用于查询,例如一些字典表等,使用方式在方法上增加注解,并指定表名:```@GlobalDataSource(tableName = "globalStudent")```,任取一个数据源进行指定
- @RandomDataSource 随机路由,用来搞笑的,适用于增删改查,使用方式:```@RandomDataSource(tableName = "randomStudent")```
- @ShardingDataSource 分片路由,根据表名获取分片字段,根据分片字段获取分片值,进行hash计算,得出要存入的数据源,适用于增删改查,使用方式:```@ShardingDataSource(tableName = "shardingStudent")```
- @UnionDataSource 广播路由(聚合路由),根据配置获取所有的数据源进行查询,如果返回结果是对象,则取第一个值,如果返回结果是集合,则进行合并返回,只用于查询```@UnionDataSource(tableName = "unionStudent")```
- @ReadWriteSeparationDataSource 读写分离路由,不在细讲,适用于增删改查,如果不需要复杂版的可以简化
结合配置文件,示例如下:applicationContext-routers.xml
```
```
分片路由算法说明:length总和为1024,count为分几片,每片占1024的多少比例,dataSourceKey要和count总和保持一致,
```
```
## 五、项目演示
## 六、专栏学习(自愿支持)
## 七、与我联系
## 八、参与贡献
1. 如果您对本项目有任何建议或发现文中内容有误的,欢迎提交 issues 进行指正。
2. 对于文中我没有涉及到知识点,欢迎提交 PR。