diff --git a/src/main/java/com/example/demo/config/Mysql1DataSourceConfig.java b/src/main/java/com/example/demo/config/Mysql1DataSourceConfig.java index 3687418..d6b7f6c 100644 --- a/src/main/java/com/example/demo/config/Mysql1DataSourceConfig.java +++ b/src/main/java/com/example/demo/config/Mysql1DataSourceConfig.java @@ -21,7 +21,20 @@ public class Mysql1DataSourceConfig { @Bean(name = "mysql1DataSource") @ConfigurationProperties(prefix = "spring.datasource.mysql1") public DataSource mysql1DataSource() { - return DataSourceBuilder.create().type(HikariDataSource.class).build(); + + // 1. 先用 builder 创建出来 + HikariDataSource ds = DataSourceBuilder + .create() + .type(HikariDataSource.class) + .build(); // 这里已经把 yml 里的 url/username/password 装好了 + + // 2. 再补连接初始化 SQL(每次拿到连接自动执行) + ds.setConnectionInitSql( + "SET SESSION profiling=0,long_query_time=10,sql_mode='TRADITIONAL';"); + + // 3. 如有需要还可继续补 ds.setMaximumPoolSize() 等 + return ds; + // return DataSourceBuilder.create().type(HikariDataSource.class).build(); } @Bean(name = "mysql1SqlSessionFactory") // @Primary diff --git a/src/main/java/com/example/demo/serviceImpl/coin/StatisticsServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/StatisticsServiceImpl.java index fb2b38f..d6b6c5f 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/StatisticsServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/StatisticsServiceImpl.java @@ -8,6 +8,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; import java.time.LocalTime; @@ -35,6 +36,7 @@ public class StatisticsServiceImpl implements StatisticsService { */ @Override // @Scheduled(cron = "0 4 * * * ?") // 每小时执行一次 + @Transactional(rollbackFor = Exception.class) // 1. 开启事务 public void runHourlyTaskPart1() { LocalDate today = LocalDate.now(); //取当天日期 List list = statisticsMapper.listPart1All(today); @@ -42,6 +44,8 @@ public class StatisticsServiceImpl implements StatisticsService { if (!list.isEmpty()) { statisticsMapper.batchInsertPart1(list); } + // 2. 日志验证连接已归还 + log.info("=== Part1 done, tx commit, connection will be closed by Spring ==="); } /* @@ -49,6 +53,7 @@ public class StatisticsServiceImpl implements StatisticsService { */ @Override //@Scheduled(cron = "0 8 * * * ?") // 每小时执行一次 + @Transactional(rollbackFor = Exception.class) // 1. 开启事务 public void runHourlyTaskPart2() { //设定起止时间 当天00:00:00至23:59:59 LocalDate today = LocalDate.now(); @@ -61,6 +66,9 @@ public class StatisticsServiceImpl implements StatisticsService { if (!list.isEmpty()) { statisticsMapper.batchInsertPart2(list); } + // 2. 日志验证连接已归还 + log.info("=== Part1 done, tx commit, connection will be closed by Spring ==="); + } @@ -69,6 +77,7 @@ public class StatisticsServiceImpl implements StatisticsService { */ @Override //@Scheduled(cron = "0 12 * * * ?") // 每小时执行一次 + @Transactional(rollbackFor = Exception.class) // 1. 开启事务 public void runHourlyTaskYear() { LocalDate today = LocalDate.now(); LocalDate firstDay = today.withDayOfYear(1); @@ -81,6 +90,9 @@ public class StatisticsServiceImpl implements StatisticsService { if (!list.isEmpty()) { statisticsMapper.batchInsertYear(list); } + // 2. 日志验证连接已归还 + log.info("=== Part1 done, tx commit, connection will be closed by Spring ==="); + } @@ -89,11 +101,15 @@ public class StatisticsServiceImpl implements StatisticsService { */ @Override //@Scheduled(cron = "0 30 0 * * ?") // 修改为每天 00:30 执行 + @Transactional(rollbackFor = Exception.class) // 1. 开启事务 public void runDailyTaskPart2() { List list = statisticsMapper.listPart2RangeAll(); if (!list.isEmpty()) { statisticsMapper.batchInsertPart2(list); } + // 2. 日志验证连接已归还 + log.info("=== Part1 done, tx commit, connection will be closed by Spring ==="); + } } diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 29e9b15..614b47a 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -9,6 +9,7 @@ spring: password: aDiw7MERSATdfGta driver-class-name: com.mysql.cj.jdbc.Driver hikari: + auto-commit: false pool-name: mysql1HikariCP maximum-pool-size: 10 mysql2: diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 3837d2b..efd57a2 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -28,7 +28,7 @@ mybatis: mysql3: map-underscore-to-camel-case: true # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl - + default-executor-type: reuse upload: path: D:\upload