Skip to content

Commit 839f7dc

Browse files
committed
修改ApiBoot Quartz读取properties方式
1 parent 6f9c2c7 commit 839f7dc

File tree

3 files changed

+102
-29
lines changed

3 files changed

+102
-29
lines changed

api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/quartz/ApiBootQuartzAutoConfiguration.java

Lines changed: 39 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import org.springframework.boot.autoconfigure.quartz.SchedulerFactoryBeanCustomizer;
2222
import org.springframework.boot.autoconfigure.transaction.PlatformTransactionManagerCustomizer;
2323
import org.springframework.boot.context.properties.EnableConfigurationProperties;
24-
import org.springframework.boot.jdbc.DataSourceInitializationMode;
2524
import org.springframework.context.ApplicationContext;
2625
import org.springframework.context.annotation.Bean;
2726
import org.springframework.context.annotation.Configuration;
@@ -32,6 +31,8 @@
3231
import org.springframework.transaction.PlatformTransactionManager;
3332

3433
import javax.sql.DataSource;
34+
import java.lang.reflect.Field;
35+
import java.util.Arrays;
3536
import java.util.Map;
3637
import java.util.Properties;
3738

@@ -67,8 +68,6 @@ public ApiBootQuartzAutoConfiguration(ApiBootQuartzProperties properties, Object
6768
this.calendars = calendars;
6869
this.triggers = triggers;
6970
this.applicationContext = applicationContext;
70-
// 初始化Quartz Properties
71-
initDefaultProperties();
7271
}
7372

7473
/**
@@ -124,25 +123,6 @@ private Properties asProperties(Map<String, String> source) {
124123
return properties;
125124
}
126125

127-
/**
128-
* 初始化默认属性配置
129-
* 仅在JDBC方式下进行初始化
130-
*/
131-
private void initDefaultProperties() {
132-
// 数据源方式,设置相关属性
133-
if (JobStoreType.JDBC.toString().equals(this.properties.getJobStoreType().toString())) {
134-
this.properties.getJdbc().setInitializeSchema(DataSourceInitializationMode.EMBEDDED);
135-
this.properties.getProperties().put("org.quartz.scheduler.instanceName", "jobScheduler");
136-
this.properties.getProperties().put("org.quartz.scheduler.instanceId", "AUTO");
137-
this.properties.getProperties().put("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX");
138-
this.properties.getProperties().put("org.quartz.jobStore.driverDelegateClass", "org.quartz.impl.jdbcjobstore.StdJDBCDelegate");
139-
this.properties.getProperties().put("org.quartz.jobStore.tablePrefix", "QRTZ_");
140-
this.properties.getProperties().put("org.quartz.jobStore.isClustered", "true");
141-
this.properties.getProperties().put("org.quartz.jobStore.clusterCheckinInterval", "20000");
142-
this.properties.getProperties().put("org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread", "true");
143-
}
144-
}
145-
146126
private void customize(SchedulerFactoryBean schedulerFactoryBean) {
147127
this.customizers.orderedStream().forEach((customizer) -> customizer.customize(schedulerFactoryBean));
148128
}
@@ -153,14 +133,46 @@ protected static class JdbcStoreTypeConfiguration {
153133
protected JdbcStoreTypeConfiguration() {
154134
}
155135

136+
/**
137+
* properties needed to initialize Jdbc mode
138+
*
139+
* @return
140+
*/
156141
@Bean
157142
@Order(0)
158-
public SchedulerFactoryBeanCustomizer jobDataSourceCustomizer( ApiBootQuartzProperties properties, DataSource dataSource, @QuartzDataSource ObjectProvider<DataSource> quartzDataSource, ObjectProvider<PlatformTransactionManager> transactionManager) {
143+
public SchedulerFactoryBeanCustomizer jobPropertiesCustomizer(ApiBootQuartzProperties properties) {
144+
return schedulerFactoryBean -> {
145+
// jdbc away
146+
if (properties.getJobStoreType() == JobStoreType.JDBC) {
147+
148+
ApiBootQuartzProperties.Prop prop = properties.getProp();
149+
// get prop class declared fields
150+
Field[] fields = prop.getClass().getDeclaredFields();
151+
Arrays.stream(fields).forEach(field -> {
152+
try {
153+
field.setAccessible(true);
154+
String value = String.valueOf(field.get(prop));
155+
PropKey propKey = field.getDeclaredAnnotation(PropKey.class);
156+
157+
// put prop to quartz properties
158+
properties.getProperties().put(propKey.value(), value);
159+
} catch (IllegalAccessException e) {
160+
e.printStackTrace();
161+
}
162+
163+
});
164+
}
165+
};
166+
}
167+
168+
@Bean
169+
@Order(1)
170+
public SchedulerFactoryBeanCustomizer jobDataSourceCustomizer(ApiBootQuartzProperties properties, DataSource dataSource, @QuartzDataSource ObjectProvider<DataSource> quartzDataSource, ObjectProvider<PlatformTransactionManager> transactionManager) {
159171
return (schedulerFactoryBean) -> {
160172
if (properties.getJobStoreType() == JobStoreType.JDBC) {
161173
DataSource dataSourceToUse = this.getDataSource(dataSource, quartzDataSource);
162174
schedulerFactoryBean.setDataSource(dataSourceToUse);
163-
PlatformTransactionManager txManager = (PlatformTransactionManager) transactionManager.getIfUnique();
175+
PlatformTransactionManager txManager = transactionManager.getIfUnique();
164176
if (txManager != null) {
165177
schedulerFactoryBean.setTransactionManager(txManager);
166178
}
@@ -170,13 +182,13 @@ public SchedulerFactoryBeanCustomizer jobDataSourceCustomizer( ApiBootQuartzProp
170182
}
171183

172184
private DataSource getDataSource(DataSource dataSource, ObjectProvider<DataSource> quartzDataSource) {
173-
DataSource dataSourceIfAvailable = (DataSource) quartzDataSource.getIfAvailable();
185+
DataSource dataSourceIfAvailable = quartzDataSource.getIfAvailable();
174186
return dataSourceIfAvailable != null ? dataSourceIfAvailable : dataSource;
175187
}
176188

177189
@Bean
178190
@ConditionalOnMissingBean
179-
public ApiBootQuartzDataSourceInitializer apiBootQuartzDataSourceInitializer(DataSource dataSource, @QuartzDataSource ObjectProvider<DataSource> quartzDataSource, ResourceLoader resourceLoader, ApiBootQuartzProperties properties) {
191+
public ApiBootQuartzDataSourceInitializer apiBootQuartzDataSourceInitializer(DataSource dataSource, @QuartzDataSource ObjectProvider<DataSource> quartzDataSource, ResourceLoader resourceLoader, ApiBootQuartzProperties properties) {
180192
DataSource dataSourceToUse = this.getDataSource(dataSource, quartzDataSource);
181193
return new ApiBootQuartzDataSourceInitializer(dataSourceToUse, resourceLoader, properties);
182194
}
@@ -188,7 +200,7 @@ public static ApiBootQuartzAutoConfiguration.JdbcStoreTypeConfiguration.DataSour
188200

189201
private static class DataSourceInitializerSchedulerDependencyPostProcessor extends AbstractDependsOnBeanFactoryPostProcessor {
190202
DataSourceInitializerSchedulerDependencyPostProcessor() {
191-
super(Scheduler.class, SchedulerFactoryBean.class, new String[]{"quartzDataSourceInitializer"});
203+
super(Scheduler.class, SchedulerFactoryBean.class, new String[]{"apiBootQuartzDataSourceInitializer"});
192204
}
193205
}
194206
}

api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/quartz/ApiBootQuartzProperties.java

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
package org.minbox.framework.api.boot.autoconfigure.quartz;
22

33
import lombok.Data;
4+
import lombok.Getter;
5+
import lombok.Setter;
46
import org.springframework.boot.autoconfigure.quartz.JobStoreType;
5-
import org.springframework.boot.autoconfigure.quartz.QuartzProperties;
67
import org.springframework.boot.context.properties.ConfigurationProperties;
78
import org.springframework.boot.jdbc.DataSourceInitializationMode;
89
import org.springframework.context.annotation.Configuration;
@@ -69,7 +70,46 @@ public class ApiBootQuartzProperties {
6970
*/
7071
private final Map<String, String> properties = new HashMap<>();
7172

72-
private final QuartzProperties.Jdbc jdbc = new QuartzProperties.Jdbc();
73+
/**
74+
* prop config
75+
* all param have default value
76+
*/
77+
private final ApiBootQuartzProperties.Prop prop = new ApiBootQuartzProperties.Prop();
78+
79+
private final ApiBootQuartzProperties.Jdbc jdbc = new ApiBootQuartzProperties.Jdbc();
80+
81+
/**
82+
* org.minbox.framework.api.boot.autoconfigure.quartz.ApiBootQuartzProperties#properties
83+
* <p>
84+
* quartz properties config
85+
*/
86+
@Getter
87+
@Setter
88+
public static class Prop {
89+
@PropKey("org.quartz.scheduler.instanceName")
90+
private String schedulerInstanceName = "jobScheduler";
91+
92+
@PropKey("org.quartz.scheduler.instanceId")
93+
private String schedulerInstanceId = "AUTO";
94+
95+
@PropKey("org.quartz.jobStore.class")
96+
private String jobStoreClass = "org.quartz.impl.jdbcjobstore.JobStoreTX";
97+
98+
@PropKey("org.quartz.jobStore.driverDelegateClass")
99+
private String jobStoreDriverDelegateClass = "org.quartz.impl.jdbcjobstore.StdJDBCDelegate";
100+
101+
@PropKey("org.quartz.jobStore.tablePrefix")
102+
private String jobStoreTablePrefix = "QRTZ_";
103+
104+
@PropKey("org.quartz.jobStore.isClustered")
105+
private boolean jobStoreClustered = true;
106+
107+
@PropKey("org.quartz.jobStore.clusterCheckinInterval")
108+
private long jobStoreClusterCheckinInterval = 20000;
109+
110+
@PropKey("org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread")
111+
private boolean threadPoolThreadsInheritContextClassLoaderOfInitializingThread = true;
112+
}
73113

74114
public static class Jdbc {
75115

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package org.minbox.framework.api.boot.autoconfigure.quartz;
2+
3+
import java.lang.annotation.*;
4+
5+
/**
6+
* Prop Key
7+
*
8+
* @author:恒宇少年 - 于起宇
9+
* <p>
10+
* DateTime:2019-03-30 17:17
11+
* Blog:http://blog.yuqiyu.com
12+
* WebSite:http://www.jianshu.com/u/092df3f77bca
13+
* Gitee:https://gitee.com/hengboy
14+
* GitHub:https://github.com/hengboy
15+
*/
16+
@Target({ElementType.FIELD})
17+
@Retention(RetentionPolicy.RUNTIME)
18+
@Documented
19+
public @interface PropKey {
20+
String value();
21+
}

0 commit comments

Comments
 (0)