跳至主要内容

让Quartz Scheduler在小写表名下运行

Welcome file

简介

在使用Quartz框架时,框架内的sql语句都是使用大写的表名来操作,但是在公司内统一小写并且开启了大小写敏感的情况下,Quartz就会报错。Quartz官方也不打算提供可配置的大小写选项,只是说开启数据库大小写不敏感就可以解决[1]。在很多情况下,公司内的规范都不是个人能轻易改变的,所以比较靠谱的方法就是改Quartz框架的代码。还好框架提供了足够的扩展点,让使用者可以解决这个问题。

修改sql执行类的配置

与sql执行相关的配置有tablePrefix、driverDelegateClass和lockHandler.class,其中后两项是使用新的实现替换框架内置的实现。新的实现可以直接使用Quartz框架的,只需要把类中对应的表名大写改成小写即可,可参考基于Spring Boot的示例工程[2]。不过需要注意的是目前我只使用到了基于Cron的调度功能,所以如果有使用其他实现,需要再对示例工程做一些相应的修改。

基于Spring Boot的application配置示例:

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/quartz_demo
spring.datasource.username=root
spring.datasource.password=root


spring.quartz.job-store-type=jdbc
spring.quartz.properties.org.quartz.jobStore.tablePrefix=qrtz_
spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=com.nereusyi.demos.quartz.StdJDBCDelegate
spring.quartz.properties.org.quartz.jobStore.lockHandler.class=com.nereusyi.demos.quartz.StdRowLockSemaphore

参考资料

[1]quartz-scheduler github issues:https://github.com/quartz-scheduler/quartz/issues/31

[2]示例工程:https://github.com/nereusyi/quartz-lower-table-name

评论

此博客中的热门博文

国密SM2签名封装成PKCS7格式

在国内做金融行业,难免会有被强制使用国密算法的情况,而且一般还会指定必须使用硬件加密机之类的设备,所以我也稍微的研究了一下国密算法,使用软算法签名并封装 PKCS7 格式(文档中的一个交互)。 以下是基于 Bouncy Castle 的示例,密钥对的生成可以参考 Bouncy Castle 中 test 包下 SM2 相关代码 public static String sign ( ) throws Exception { //加载公钥 byte [ ] plainText = "hello, world" . getBytes ( ) ; FileInputStream input = new FileInputStream ( "F:\\certificate\\public.cer" ) ; CertificateFactory certificateFactory = new CertificateFactory ( ) ; X509Certificate certificate = ( X509Certificate ) certificateFactory . engineGenerateCertificate ( input ) ; input . close ( ) ; //加载私钥,private为换成实际的私钥 PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec ( "private" . getBytes ( ) ) ; //SM2算法实际上为ECC算法,并指定了一些参数值,所以这里的参数是EC KeyFactory factory = KeyFactory . getInstance ( "EC" , "BC" ) ; PrivateKey privateKey = factory . generatePrivate ( spec ) ; //以下为签名并封装成PKCS7格式 byte [ ] signedMessag

Spring Boot Actuator 2 示例

Welcome file 简介 Spring Boot Actuator为应用程序提供了各种开箱即用的运维特性,可以与应用方便的交互和监控。 使用环境:Java 11 和 Spring Boot 2.4.3.RELEASE 集成Spring Boot Actuator 在Spring Boot中集成Spring Boot Actuator与集成其他的框架类似,在 pom.xml 里引入相关的starter就可以: < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-actuator </ artifactId > </ dependency > < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-web </ artifactId > </ dependency > 由于大部分的使用场景还是web,所以这里也用Spring MVC做示例。 配置好 pom.xml 后,默认actuator仅暴露一些基本功能,实际使用中,根据需求暴露对应功能。为了简便测试,这里在 application.yml 中配置暴露全部功能: management : endpoints : web : exposure : include : "*" endpoint : health : enabled : true show-details : always probes : enabled : true shutdown : enabled : true metr

NextCloud数据目录迁移

最近服务器的环境坏了,所以迁移了NextCloud的数据目录。不过在迁移过程中有点小问题。 环境: Ubuntu 18.04 Docker 19.03.7 1.NextCloud页面不正常,Docker日志显示XX目录permission denied 参考了 这里 的做法,不过是把  /var/www/html/   整个目录的权限都修改为  chown -R www-data:www-data ,之后就不再报权限问题了。 2.数据库配置修改 因为NextCloud是在初始化时填的数据库连接信息,所以直接迁移数据目录的情况下,会导致应用连不到新的数据库环境。此时可以找到数据目录下的  config/config.php 文件,直接修改数据库连接配置。