diff --git a/springboot-batch/src/main/java/com/xncoding/trans/modules/common/CommonConfig.java b/springboot-batch/src/main/java/com/xncoding/trans/modules/common/CommonConfig.java deleted file mode 100644 index 59f963c..0000000 --- a/springboot-batch/src/main/java/com/xncoding/trans/modules/common/CommonConfig.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.xncoding.trans.modules.common; - -import com.alibaba.druid.pool.DruidDataSource; -import com.xncoding.trans.config.properties.CommonProperties; -import com.xncoding.trans.modules.MyBeanValidator; -import com.xncoding.trans.modules.MyBeanWrapperFieldSetMapper; -import com.xncoding.trans.modules.MyJobListener; -import org.springframework.batch.core.Job; -import org.springframework.batch.core.Step; -import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; -import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; -import org.springframework.batch.core.configuration.annotation.StepScope; -import org.springframework.batch.core.launch.support.RunIdIncrementer; -import org.springframework.batch.item.ItemProcessor; -import org.springframework.batch.item.ItemReader; -import org.springframework.batch.item.ItemWriter; -import org.springframework.batch.item.ParseException; -import org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider; -import org.springframework.batch.item.database.JdbcBatchItemWriter; -import org.springframework.batch.item.file.FlatFileItemReader; -import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper; -import org.springframework.batch.item.file.mapping.DefaultLineMapper; -import org.springframework.batch.item.file.transform.DelimitedLineTokenizer; -import org.springframework.batch.item.validator.ValidatingItemProcessor; -import org.springframework.batch.item.validator.ValidationException; -import org.springframework.batch.item.validator.Validator; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.ClassPathResource; -import org.springframework.core.io.FileSystemResource; - -import javax.annotation.Resource; - -/** - * 泛型配置 - * - * @author XiongNeng - * @version 1.0 - * @since 2018/2/3 - */ -@Configuration -public class CommonConfig { - @Resource - private CommonProperties p; - /** - * ItemReader定义,用来读取数据 - * 1,使用FlatFileItemReader读取文件 - * 2,使用FlatFileItemReader的setResource方法设置csv文件的路径 - * 3,对此对cvs文件的数据和领域模型类做对应映射 - * - * @return FlatFileItemReader - */ - @Bean(name = "commonReader") - @StepScope - public FlatFileItemReader reader(@Value("#{jobParameters['input.file.name']}") String pathToFile, - @Value("#{jobParameters['input.vo.name']}") String voClass, - @Value("#{jobParameters['input.columns']}") String columns) { - FlatFileItemReader reader = new FlatFileItemReader<>(); - if (p.getLocation() == 1) { - reader.setResource(new FileSystemResource(pathToFile)); - } else { - reader.setResource(new ClassPathResource(pathToFile)); - } - reader.setLineMapper(new DefaultLineMapper() { - { - setLineTokenizer(new DelimitedLineTokenizer("|") { - { - setNames(columns.split(",")); - setQuoteCharacter('^'); - } - }); - setFieldSetMapper(new MyBeanWrapperFieldSetMapper() {{ - try { - setTargetType(Class.forName(voClass)); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } - }}); - } - }); - // 如果包含header,需要忽略掉 - reader.setLinesToSkip(1); - return reader; - } - - /** - * ItemProcessor定义,用来处理数据 - * - * @return - */ - @Bean(name = "commonProcessor") - public ItemProcessor processor() { - //使用我们自定义的ItemProcessor的实现CsvItemProcessor - ValidatingItemProcessor processor = new ValidatingItemProcessor() { - public Object process(Object item) throws ValidationException { - /* - * 需要执行super.process(item)才会调用自定义校验器 - */ - super.process(item); - /* - * 对数据进行简单的处理和转换 todo - */ - - return item; - } - }; - //为processor指定校验器为CsvBeanValidator() - processor.setValidator(csvBeanValidator()); - return processor; - } - - /** - * ItemWriter定义,用来输出数据 - * spring能让容器中已有的Bean以参数的形式注入,Spring Boot已经为我们定义了dataSource - * - * @param dataSource - * @return - */ - @Bean(name = "commonWriter") - @StepScope - public ItemWriter writer(DruidDataSource dataSource, - @Value("#{jobParameters['input.sql']}") String sql) { - JdbcBatchItemWriter writer = new JdbcBatchItemWriter<>(); - //我们使用JDBC批处理的JdbcBatchItemWriter来写数据到数据库 - writer.setItemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>()); - //在此设置要执行批处理的SQL语句 - writer.setSql(sql); - writer.setDataSource(dataSource); - return writer; - } - - /** - * Job定义,我们要实际执行的任务,包含一个或多个Step - * - * @param jobBuilderFactory - * @param s1 - * @return - */ - @Bean(name = "commonJob") - public Job commonJob(JobBuilderFactory jobBuilderFactory, - @Qualifier("commonStep1") Step s1) { - return jobBuilderFactory.get("commonJob") - .incrementer(new RunIdIncrementer()) - .flow(s1)//为Job指定Step - .end() - .listener(new MyJobListener())//绑定监听器csvJobListener - .build(); - } - - /** - * step步骤,包含ItemReader,ItemProcessor和ItemWriter - * - * @param stepBuilderFactory - * @param reader - * @param writer - * @param processor - * @return - */ - @Bean(name = "commonStep1") - public Step commonStep1(StepBuilderFactory stepBuilderFactory, - @Qualifier("commonReader") ItemReader reader, - @Qualifier("commonWriter") ItemWriter writer, - @Qualifier("commonProcessor") ItemProcessor processor) { - return stepBuilderFactory - .get("commonStep1") - .chunk(5000)//批处理每次提交5000条数据 - .reader(reader)//给step绑定reader - .processor(processor)//给step绑定processor - .writer(writer)//给step绑定writer -// .faultTolerant() -// .retry(Exception.class) // 重试 -// .noRetry(ParseException.class) -// .retryLimit(1) //每条记录重试一次 -// .skip(Exception.class) -// .skipLimit(100) //一共允许跳过100次异常 -// .taskExecutor(new SimpleAsyncTaskExecutor()) //设置每个Job通过并发方式执行,一般来讲一个Job就让它串行完成的好 -// .throttleLimit(10) //并发任务数为 10,默认为4 - .build(); - } - - @Bean - public Validator csvBeanValidator() { - return new MyBeanValidator<>(); - } -} - - - - diff --git a/springboot-cache/pom.xml b/springboot-cache/pom.xml index 1883b89..004f9de 100644 --- a/springboot-cache/pom.xml +++ b/springboot-cache/pom.xml @@ -47,6 +47,7 @@ org.springframework.boot spring-boot-starter-test + test com.vaadin.external.google diff --git a/springboot-cache/src/main/resources/application.yml b/springboot-cache/src/main/resources/application.yml index 6fd4aa3..a9d039e 100644 --- a/springboot-cache/src/main/resources/application.yml +++ b/springboot-cache/src/main/resources/application.yml @@ -10,9 +10,9 @@ spring: profiles: active: dev datasource: - url: jdbc:mysql://123.207.66.156:3306/test?useSSL=false&autoReconnect=true&tinyInt1isBit=false&useUnicode=true&characterEncoding=utf8 + url: jdbc:mysql://127.0.0.1:3306/test?useSSL=false&autoReconnect=true&tinyInt1isBit=false&useUnicode=true&characterEncoding=utf8 username: root - password: _EnZhi123 + password: 123456 ################### mybatis-plus配置 ################### mybatis-plus: @@ -48,7 +48,7 @@ spring: use-key-prefix: true cache-names: userCache,allUsersCache redis: - host: 123.207.66.156 + host: 127.0.0.1 port: 6379 database: 0 lettuce: diff --git a/springboot-redis/pom.xml b/springboot-redis/pom.xml index a667d9a..daca3fd 100644 --- a/springboot-redis/pom.xml +++ b/springboot-redis/pom.xml @@ -34,6 +34,10 @@ org.springframework.boot spring-boot-starter-data-redis + + org.apache.commons + commons-pool2 + com.fasterxml.jackson.core @@ -54,6 +58,7 @@ org.springframework.boot spring-boot-starter-test + test com.vaadin.external.google diff --git a/springboot-redis/src/main/java/com/xncoding/pos/service/UserService.java b/springboot-redis/src/main/java/com/xncoding/pos/service/UserService.java index 534075b..9fd3baf 100644 --- a/springboot-redis/src/main/java/com/xncoding/pos/service/UserService.java +++ b/springboot-redis/src/main/java/com/xncoding/pos/service/UserService.java @@ -7,11 +7,13 @@ import org.slf4j.LoggerFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.concurrent.TimeUnit; @Service +@Transactional public class UserService { private Logger logger = LoggerFactory.getLogger(this.getClass()); @Resource diff --git a/springboot-redis/src/main/resources/application.yml b/springboot-redis/src/main/resources/application.yml index 8238996..ce95c1b 100644 --- a/springboot-redis/src/main/resources/application.yml +++ b/springboot-redis/src/main/resources/application.yml @@ -7,9 +7,9 @@ spring: profiles: active: dev datasource: - url: jdbc:mysql://127.0.0.1:3306/test?useSSL=false&autoReconnect=true&tinyInt1isBit=false&useUnicode=true&characterEncoding=utf8 + url: jdbc:mysql://123.207.66.156:3306/test?useSSL=false&autoReconnect=true&tinyInt1isBit=false&useUnicode=true&characterEncoding=utf8 username: root - password: 123456 + password: _EnZhi123 ################### mybatis-plus配置 ################### mybatis-plus: @@ -39,16 +39,22 @@ spring: profiles: dev cache: type: REDIS + redis: + cache-null-values: false + time-to-live: 600000ms + use-key-prefix: true + cache-names: userCache,allUsersCache redis: - host: 127.0.0.1 + host: 123.207.66.156 port: 6379 - timeout: 0 database: 0 - pool: - max-active: 100 - max-wait: -1 - max-idle: 8 - min-idle: 0 + lettuce: + shutdown-timeout: 200ms + pool: + max-active: 7 + max-idle: 7 + min-idle: 2 + max-wait: -1ms logging: level: diff --git a/springboot-redis/src/test/java/com/xncoding/service/UserServiceTest.java b/springboot-redis/src/test/java/com/xncoding/service/UserServiceTest.java index 43783d9..1289fec 100644 --- a/springboot-redis/src/test/java/com/xncoding/service/UserServiceTest.java +++ b/springboot-redis/src/test/java/com/xncoding/service/UserServiceTest.java @@ -8,6 +8,7 @@ import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.transaction.annotation.Transactional; import java.util.Random; @@ -24,12 +25,13 @@ import static org.junit.Assert.assertNull; */ @RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class) +@Transactional public class UserServiceTest { @Autowired private UserService userService; @Test public void testCache() { - int id = new Random().nextInt(100); + int id = new Random().nextInt(1000); User user = new User(id, "admin", "admin"); userService.createUser(user); User user1 = userService.getById(id); // 第1次访问