# 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项目脚手架 [![star](https://gitee.com/wangss3/leo-springboot-javafx/badge/star.svg?theme=dark)](https://gitee.com/wangss3/leo-springboot-javafx) [![fork](https://gitee.com/wangss3/leo-springboot-javafx/badge/fork.svg?theme=dark)](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) ## 二、项目架构 **目录结构**: ![](src/main/resources/static/md_images/目录结构.png) **引入功能**: - 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文件生成 ![](src/main/resources/static/md_images/生成exe命令.png) ## 三、引入组件 **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。