记录Spring boot 项目中druid SQL验证报错但是系统功能正常 报后端报 merge sql error 前端数据查询正常

在Spring Boot项目中,遇到Druid SQL验证错误,前端数据查询正常,但后端报'merge sql error'。通过升级Druid版本无效后,发现是SQL语句在特定环境中存在不严谨之处。通过修改application.yaml中的Druid配置(将`merge-sql`设为`false`)解决问题,但实际应勇敢面对问题,检查并修正SQL语句。最终,发现SQL语法问题并修复,系统恢复正常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

异常代码:

20:17:49.331 [http-nio-8081-exec-6] ERROR c.a.d.f.s.StatFilter - [mergeSql,169] - merge sql error, dbType oracle, druid-1.2.8, sql : WITH
        orgn AS(SELECT w.dwid,w.qk,w.qkdm,w.jhid FROM cd_orgn_source_attr w WHERE w.dwid='xAJLaafdjei321jlaj13nanfasX000113'),
        pclog AS(SELECT p.orgn_id,p.sand_layer_group_name AS cw ,p.soak_volume,p.thickness,p.soak_thickness,p.perforate_orgn_top_depth top FROM pc_log_desc_infuse p WHERE p.soak_volume>0 AND p.sand_layer_group_name IS NOT NULL ORDER BY top ASC),
res AS(SELECT *FROM orgn w INNER JOIN pclog p ON w.jhid=p.orgn_id),
cwres AS (SELECT cw,orgn_id FROM res GROUP BY orgn_id,cw ORDER BY cw),
layerdata AS(SELECT distinct(cw) AS "cw",SUM(thickness) AS "sy",SUM(soak_thickness) AS "yx",(SELECT COUNT(c.orgn_id) FROM cwres c WHERE c.cw=r.cw ) AS "cs" FROM res r WHERE r.QKDM=? GROUP BY cw),
        sumdata AS(SELECT SUM(&#
Spring Boot项目中,可以使用编程式控制事务的方式来保证数据库操作的一致性和完整性。具体实现方式如下: 1.Spring Boot项目中引入Spring事务的依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> ``` 2. 在配置文件中配置数据源和事务管理器: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # 配置事务管理器 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.druid.initial-size=5 spring.datasource.druid.min-idle=5 spring.datasource.druid.max-active=20 spring.datasource.druid.max-wait=60000 spring.datasource.druid.time-between-eviction-runs-millis=60000 spring.datasource.druid.min-evictable-idle-time-millis=300000 spring.datasource.druid.validation-query=SELECT 1 FROM DUAL spring.datasource.druid.test-while-idle=true spring.datasource.druid.test-on-borrow=false spring.datasource.druid.test-on-return=false # 配置事务管理器 spring.datasource.druid.filters=stat,wall spring.datasource.druid.use-global-data-source-stat=true # 配置事务管理器 spring.datasource.druid.filter.stat.log-slow-sql=true spring.datasource.druid.filter.stat.slow-sql-millis=2000 # 配置事务管理器 spring.datasource.druid.filter.wall.log-violation=true spring.datasource.druid.filter.wall.throw-error=false spring.datasource.druid.filter.wall.update-allow=true spring.datasource.druid.filter.wall.delete-allow=true spring.datasource.druid.filter.wall.insert-allow=true spring.datasource.druid.filter.wall.select-allow=true spring.datasource.druid.filter.wall.multi-statement-allow=true # 配置事务管理器 spring.datasource.druid.connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 # 配置事务管理器 spring.datasource.druid.connection-init-sqls=SET NAMES utf8mb4 COLLATE utf8mb4_general_ci # 配置事务管理器 spring.datasource.druid.use-global-data-source-stat=true # 配置事务管理器 spring.datasource.druid.time-between-eviction-runs-millis=60000 spring.datasource.druid.min-evictable-idle-time-millis=300000 # 配置事务管理器 spring.datasource.druid.pool-prepared-statements=true spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20 # 配置事务管理器 mybatis.configuration.map-underscore-to-camel-case=true mybatis.mapper-locations=classpath*:mapper/*.xml # 配置事务管理器 spring.datasource.druid.stat-view-servlet.allow=true spring.datasource.druid.web-stat-filter.enabled=true spring.datasource.druid.stat-view-servlet.url-pattern=/druid/* spring.datasource.druid.stat-view-servlet.login-username=admin spring.datasource.druid.stat-view-servlet.login-password=admin ``` 3. 在需要实现事务的方法上添加`@Transactional`注解: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override @Transactional(rollbackFor = Exception.class) public void save(User user) { userMapper.save(user); //抛出异常 throw new RuntimeException("test transactional"); } } ``` 4. 在需要调用事务的地方调用上述方法即可: ```java @RestController public class UserController { @Autowired private UserService userService; @PostMapping("/user") public void save(@RequestBody User user) { userService.save(user); } } ``` 以上就是在Spring Boot项目中使用编程式控制事务的步骤和示例代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值