diff --git a/.gitignore b/.gitignore
index c0d329d..2d85157 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,3 +18,9 @@ SpringBootCodeBase.iml
/SpringBoot-LTS/target/
/logs/
/springBoot-ShardingJDBC/target/
+/SpringBoot-mybatis-plus/target/
+/SpringBoot-OSS/target/
+/SpringBoot-rocketMQ-producer/
+/SpringBoot-rocketMQ-producer/mq-producer.iml
+/SpringBoot-Security/target/
+/SpringBoot-rocketMQ-consumer/target/
\ No newline at end of file
diff --git a/SpringBoot-AOP/pom.xml b/SpringBoot-AOP/pom.xml
index c30fbf8..6115baa 100644
--- a/SpringBoot-AOP/pom.xml
+++ b/SpringBoot-AOP/pom.xml
@@ -43,6 +43,14 @@
fastjson
1.2.41
+
+
+ org.hibernate.validator
+ hibernate-validator
+ 6.1.2.Final
+
+
+
diff --git a/SpringBoot-AOP/src/main/java/com/fancv/ExceptionHandler/GlobalExceptionHandler.java b/SpringBoot-AOP/src/main/java/com/fancv/ExceptionHandler/GlobalExceptionHandler.java
index 6e91b28..af1f257 100644
--- a/SpringBoot-AOP/src/main/java/com/fancv/ExceptionHandler/GlobalExceptionHandler.java
+++ b/SpringBoot-AOP/src/main/java/com/fancv/ExceptionHandler/GlobalExceptionHandler.java
@@ -3,16 +3,22 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
+import javax.validation.ConstraintViolationException;
+import javax.validation.ValidationException;
@ControllerAdvice
public class GlobalExceptionHandler {
private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
+ private static String DUPLICATE_KEY_CODE = "1001";
+ private static String PARAM_FAIL_CODE = "1002";
+ private static String VALIDATION_CODE = "1003";
/**
* 处理自定义的业务异常
* @param req
@@ -52,5 +58,36 @@ public ResultBody exceptionHandler(HttpServletRequest req, Exception e){
logger.error("未知异常!原因是:",e);
return ResultBody.error(CommonEnum.INTERNAL_SERVER_ERROR);
}
+
+
+ /**
+ * 方法参数校验
+ */
+ @ExceptionHandler(MethodArgumentNotValidException.class)
+ @ResponseBody
+ public ResultBody handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
+ logger.error(e.getMessage(), e);
+ return ResultBody.error(PARAM_FAIL_CODE, e.getBindingResult().getFieldError().getDefaultMessage());
+ }
+
+ /**
+ * ValidationException
+ */
+ @ExceptionHandler(ValidationException.class)
+ @ResponseBody
+ public ResultBody handleValidationException(ValidationException e) {
+ logger.error(e.getMessage(), e);
+ return ResultBody.error(VALIDATION_CODE, e.getCause().getMessage());
+ }
+
+ /**
+ * ConstraintViolationException
+ */
+ @ExceptionHandler(ConstraintViolationException.class)
+ @ResponseBody
+ public ResultBody handleConstraintViolationException(ConstraintViolationException e) {
+ logger.error(e.getMessage(), e);
+ return ResultBody.error(PARAM_FAIL_CODE, e.getMessage());
+ }
}
diff --git a/SpringBoot-AOP/src/main/java/com/fancv/ExceptionHandler/ResultBody.java b/SpringBoot-AOP/src/main/java/com/fancv/ExceptionHandler/ResultBody.java
index 874ea20..d220288 100644
--- a/SpringBoot-AOP/src/main/java/com/fancv/ExceptionHandler/ResultBody.java
+++ b/SpringBoot-AOP/src/main/java/com/fancv/ExceptionHandler/ResultBody.java
@@ -2,7 +2,9 @@
import com.alibaba.fastjson.JSONObject;
+import lombok.Data;
+@Data
public class ResultBody {
/**
* 响应代码
diff --git a/SpringBoot-AOP/src/main/java/com/fancv/controller/UserListController.java b/SpringBoot-AOP/src/main/java/com/fancv/controller/UserListController.java
index 27e142d..9c2de53 100644
--- a/SpringBoot-AOP/src/main/java/com/fancv/controller/UserListController.java
+++ b/SpringBoot-AOP/src/main/java/com/fancv/controller/UserListController.java
@@ -1,18 +1,22 @@
package com.fancv.controller;
+import com.alibaba.fastjson.JSON;
+import com.fancv.login.BaseUserDTO;
import com.fancv.permission.PermissionAnnotation;
import io.swagger.annotations.Api;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequestMapping("user/")
@Api(tags = "1.user")
+@Slf4j
public class UserListController {
@@ -30,4 +34,11 @@ public String userLogin(@RequestParam(defaultValue = "001") String userId) {
return "登录成功!";
}
+ @PostMapping("login_1")
+ public String login(@RequestBody @Validated BaseUserDTO baseUserDTO) {
+
+ log.info(JSON.toJSONString(baseUserDTO));
+ return "OK";
+ }
+
}
diff --git a/SpringBoot-AOP/src/main/java/com/fancv/login/BaseUserDTO.java b/SpringBoot-AOP/src/main/java/com/fancv/login/BaseUserDTO.java
index 5f8b097..eca5a05 100644
--- a/SpringBoot-AOP/src/main/java/com/fancv/login/BaseUserDTO.java
+++ b/SpringBoot-AOP/src/main/java/com/fancv/login/BaseUserDTO.java
@@ -2,11 +2,15 @@
import lombok.Data;
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
import java.util.List;
@Data
-public class BaseUserDTO {
+public class BaseUserDTO implements Serializable {
+ @NotNull(message = "用户姓名不能为空")
String userNmae;
String userPermission;
@@ -15,6 +19,9 @@ public class BaseUserDTO {
List permissions;
+ @Valid
+ EnterDTO enterDTO;
+
public void addPeemission(String p) {
this.permissions.add(p);
}
diff --git a/SpringBoot-AOP/src/main/java/com/fancv/login/EnterDTO.java b/SpringBoot-AOP/src/main/java/com/fancv/login/EnterDTO.java
new file mode 100644
index 0000000..bb3ca76
--- /dev/null
+++ b/SpringBoot-AOP/src/main/java/com/fancv/login/EnterDTO.java
@@ -0,0 +1,17 @@
+package com.fancv.login;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+
+@ApiModel("enterDTO")
+@Data
+public class EnterDTO {
+
+ @NotNull(message = "not empty")
+ @Min(1)
+ private Long version;
+}
diff --git a/SpringBoot-AOP/target/classes/com/fancv/ExceptionHandler/GlobalExceptionHandler.class b/SpringBoot-AOP/target/classes/com/fancv/ExceptionHandler/GlobalExceptionHandler.class
index ba749be..783254f 100644
Binary files a/SpringBoot-AOP/target/classes/com/fancv/ExceptionHandler/GlobalExceptionHandler.class and b/SpringBoot-AOP/target/classes/com/fancv/ExceptionHandler/GlobalExceptionHandler.class differ
diff --git a/SpringBoot-AOP/target/classes/com/fancv/controller/UserListController.class b/SpringBoot-AOP/target/classes/com/fancv/controller/UserListController.class
index 0884489..e1454a7 100644
Binary files a/SpringBoot-AOP/target/classes/com/fancv/controller/UserListController.class and b/SpringBoot-AOP/target/classes/com/fancv/controller/UserListController.class differ
diff --git a/SpringBoot-AOP/target/classes/com/fancv/login/BaseUserDTO.class b/SpringBoot-AOP/target/classes/com/fancv/login/BaseUserDTO.class
index 24cf52f..13a2154 100644
Binary files a/SpringBoot-AOP/target/classes/com/fancv/login/BaseUserDTO.class and b/SpringBoot-AOP/target/classes/com/fancv/login/BaseUserDTO.class differ
diff --git a/SpringBoot-MyBatis-Advances/Readme.md b/SpringBoot-MyBatis-Advances/Readme.md
index 27dd9b3..5a4d729 100644
--- a/SpringBoot-MyBatis-Advances/Readme.md
+++ b/SpringBoot-MyBatis-Advances/Readme.md
@@ -1,3 +1,5 @@
# springboot mybatis advance demo
## DataSource drui
## Reading and writing separation
+## spring cache redis
+spring cache redis 类型的实现,满足常用的配置、数据字典、类目等常见缓存场景的使用。
diff --git a/SpringBoot-OSS/src/main/resources/application.properties b/SpringBoot-OSS/src/main/resources/application.properties
index 11ca3a1..47dc664 100644
--- a/SpringBoot-OSS/src/main/resources/application.properties
+++ b/SpringBoot-OSS/src/main/resources/application.properties
@@ -1,35 +1,25 @@
spring.application.name=spring-boot-oss
-
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
-
-
-# ߿ confirm ȷϻ
+# \u00B7\u00A2\u00CB\u00CD\u00D5\u00DF\u00BF\u00AA\u00C6\u00F4 confirm \u00C8\u00B7\u00C8\u00CF\u00BB\u00FA\u00D6\u00C6
spring.rabbitmq.publisher-confirm-type=simple
-# ߿ return ȷϻ
+# \u00B7\u00A2\u00CB\u00CD\u00D5\u00DF\u00BF\u00AA\u00C6\u00F4 return \u00C8\u00B7\u00C8\u00CF\u00BB\u00FA\u00D6\u00C6
spring.rabbitmq.publisher-returns=true
####################################################
-# Ѷֶ ack
+# \u00C9\u00E8\u00D6\u00C3\u00CF\u00FB\u00B7\u00D1\u00B6\u00CB\u00CA\u00D6\u00B6\u00AF ack
spring.rabbitmq.listener.simple.acknowledge-mode=manual
-# Ƿ֧
+# \u00CA\u00C7\u00B7\u00F1\u00D6\u00A7\u00B3\u00D6\u00D6\u00D8\u00CA\u00D4
spring.rabbitmq.listener.simple.retry.enabled=true
-
-
server.port=9010
-
-
rayOssKey=LTAI5t5sF7sXqD8by7p3RCRB
rayOssSecret=
rayOssEndpoint=
rayBucketName=
-
spring.servlet.multipart.enabled=true
spring.servlet.multipart.max-file-size=2048MB
spring.servlet.multipart.maxRequestSize=2048MB
-
-
dam.oss.accessKeyId=
dam.oss.accessKeySecret=
dam.oss.bucketName=
diff --git a/SpringBoot-PgSQL/pom.xml b/SpringBoot-PgSQL/pom.xml
new file mode 100644
index 0000000..1ec9c34
--- /dev/null
+++ b/SpringBoot-PgSQL/pom.xml
@@ -0,0 +1,97 @@
+
+
+
+
+ SpringBootCodeBase
+ com.fancv
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ SpringBoot-PgSQL
+
+ SpringBoot-PgSQL
+
+ http://www.fancv.com
+
+
+ UTF-8
+ 11
+ 11
+
+
+
+
+ junit
+ junit
+ 4.11
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.postgresql
+ postgresql
+
+
+ com.alibaba
+ druid
+ 1.0.27
+
+
+ org.mybatis.spring.boot
+ mybatis-spring-boot-starter
+ 1.1.1
+
+
+
+
+
+
+
+
+
+ maven-clean-plugin
+ 3.1.0
+
+
+
+ maven-resources-plugin
+ 3.0.2
+
+
+ maven-compiler-plugin
+ 3.8.0
+
+
+ maven-surefire-plugin
+ 2.22.1
+
+
+ maven-jar-plugin
+ 3.0.2
+
+
+ maven-install-plugin
+ 2.5.2
+
+
+ maven-deploy-plugin
+ 2.8.2
+
+
+
+ maven-site-plugin
+ 3.7.1
+
+
+ maven-project-info-reports-plugin
+ 3.0.0
+
+
+
+
+
diff --git a/SpringBoot-PgSQL/src/main/java/com/fancv/App.java b/SpringBoot-PgSQL/src/main/java/com/fancv/App.java
new file mode 100644
index 0000000..7b406eb
--- /dev/null
+++ b/SpringBoot-PgSQL/src/main/java/com/fancv/App.java
@@ -0,0 +1,17 @@
+package com.fancv;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * Hello world!
+ *
+ */
+@SpringBootApplication
+public class App
+{
+ public static void main( String[] args )
+ {
+ SpringApplication.run(App.class,args);
+ }
+}
diff --git a/SpringBoot-PgSQL/src/main/java/com/fancv/config/DataConfig.java b/SpringBoot-PgSQL/src/main/java/com/fancv/config/DataConfig.java
new file mode 100644
index 0000000..f3f9942
--- /dev/null
+++ b/SpringBoot-PgSQL/src/main/java/com/fancv/config/DataConfig.java
@@ -0,0 +1,43 @@
+package com.fancv.config;
+
+import com.alibaba.druid.pool.DruidDataSource;
+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.jdbc.core.JdbcTemplate;
+
+import javax.sql.DataSource;
+
+@Configuration
+public class DataConfig {
+ @Value("${spring.datasource.username}")
+ private String user;
+ @Value("${spring.datasource.password}")
+ private String pass;
+ @Value("${spring.datasource.url}")
+ private String url;
+ @Value("${spring.datasource.driver-class-name}")
+ private String driverClassName;
+
+ @Bean(name = "data_pgsql")
+ public DataSource dataSource() {
+ return getDruidDataSource(user,pass,url,driverClassName);
+ }
+
+ private DruidDataSource getDruidDataSource(String name, String password, String url, String driver){
+ DruidDataSource druidDataSource = new DruidDataSource();
+ druidDataSource.setDriverClassName(driver);
+ druidDataSource.setUrl(url);
+ druidDataSource.setUsername(name);
+ druidDataSource.setPassword(password);
+ return druidDataSource;
+ }
+
+ @Bean(name = "jdbc_pgsql")
+ public JdbcTemplate getJdbcTemplate(@Qualifier("data_pgsql") DataSource dataSource) {
+ return new JdbcTemplate(dataSource);
+ }
+
+}
+
diff --git a/SpringBoot-PgSQL/src/main/java/com/fancv/controller/TestController.java b/SpringBoot-PgSQL/src/main/java/com/fancv/controller/TestController.java
new file mode 100644
index 0000000..2fcf510
--- /dev/null
+++ b/SpringBoot-PgSQL/src/main/java/com/fancv/controller/TestController.java
@@ -0,0 +1,30 @@
+package com.fancv.controller;
+
+import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.time.LocalDate;
+
+@RestController
+@Api(tags = "1")
+public class TestController {
+
+ @Autowired
+ @Qualifier("jdbc_pgsql")
+ private JdbcTemplate jdbcTemplate;
+
+ @GetMapping(value = "/getUser")
+ public Object get() {
+
+ LocalDate date = LocalDate.now();
+
+ System.out.println(date.toString());
+ String sql = "select * from public.user";
+ return jdbcTemplate.queryForList(sql);
+ }
+}
+
diff --git a/SpringBoot-PgSQL/src/main/resources/application.yaml b/SpringBoot-PgSQL/src/main/resources/application.yaml
new file mode 100644
index 0000000..f56948b
--- /dev/null
+++ b/SpringBoot-PgSQL/src/main/resources/application.yaml
@@ -0,0 +1,28 @@
+spring:
+ datasource:
+ username: 'postgres'
+ password: 'abc123'
+ url: jdbc:postgresql://127.0.0.1:5432/first
+ driver-class-name: org.postgresql.Driver
+ type: com.alibaba.druid.pool.DruidDataSource
+ initialSize: 5
+ minIdle: 5
+ maxActive: 20
+ maxWait: 60000
+ timeBetweenEvictionRunsMillis: 60000
+ minEvictableIdleTimeMillis: 300000
+ validationQuery: SELECT 1 FROM DUAL
+ testWhileIdle: true
+ testOnBorrow: false
+ testOnReturn: false
+ poolPreparedStatements: true
+ #配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
+ filters: stat,wall,log4j
+ maxPoolPreparedStatementPerConnectionSize: 20
+ useGlobalDataSourceStat: true
+ connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
+
+
+server:
+ port: 9019
+
diff --git a/SpringBoot-PgSQL/src/test/java/com/fancv/AppTest.java b/SpringBoot-PgSQL/src/test/java/com/fancv/AppTest.java
new file mode 100644
index 0000000..84d0c0b
--- /dev/null
+++ b/SpringBoot-PgSQL/src/test/java/com/fancv/AppTest.java
@@ -0,0 +1,20 @@
+package com.fancv;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest
+{
+ /**
+ * Rigorous Test :-)
+ */
+ @Test
+ public void shouldAnswerWithTrue()
+ {
+ assertTrue( true );
+ }
+}
diff --git a/SpringBoot-Redis/src/main/resources/application.properties b/SpringBoot-Redis/src/main/resources/application.properties
deleted file mode 100644
index 0faaf5e..0000000
--- a/SpringBoot-Redis/src/main/resources/application.properties
+++ /dev/null
@@ -1,26 +0,0 @@
-# RedisӶ˿
-spring.redis.port=6379
-# Redisַ
-spring.redis.host=127.0.0.1
-# RedisݿĬΪ0
-spring.redis.database=5
-# Redis루ĬΪգ
-spring.redis.password= ""
-# ӳʹøֵʾûƣ
-spring.redis.jedis.pool.max-active=8
-# ӳȴʱ䣨ʹøֵʾûƣ
-spring.redis.jedis.pool.max-wait=-1ms
-# ӳе
-spring.redis.jedis.pool.max-idle=8
-# ӳеС
-spring.redis.jedis.pool.min-idle=0
-# ӳʱʱ䣨룩
-spring.redis.timeout=5000ms
-
-#redis ڱRedis Server
-spring.redis.sentinel.master=devwj
-# comma-separated list of host:port pairs ڱб
-spring.redis.sentinel.nodes=192.168.5.86:28001,192.168.5.86:28002,192.168.5.86:28003
-
-server.port=9093
-
diff --git a/SpringBoot-Redis/src/main/resources/application.yaml b/SpringBoot-Redis/src/main/resources/application.yaml
new file mode 100644
index 0000000..ea8e435
--- /dev/null
+++ b/SpringBoot-Redis/src/main/resources/application.yaml
@@ -0,0 +1,8 @@
+#redis 配置
+spring:
+ redis:
+ port: 6379
+ host: 127.0.0.1
+ database: 10
+server:
+ port: 9010
\ No newline at end of file
diff --git a/SpringBoot-Security/src/main/java/com/fancv/SpringSecurityApplicationStart.java b/SpringBoot-Security/src/main/java/com/fancv/SpringSecurityApplicationStart.java
index 8940b00..70daab7 100644
--- a/SpringBoot-Security/src/main/java/com/fancv/SpringSecurityApplicationStart.java
+++ b/SpringBoot-Security/src/main/java/com/fancv/SpringSecurityApplicationStart.java
@@ -3,6 +3,7 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* Hello world!
@@ -10,6 +11,7 @@
*/
@SpringBootApplication
@EnableResourceServer
+@EnableSwagger2
public class SpringSecurityApplicationStart
{
public static void main( String[] args )
diff --git a/SpringBoot-Security/src/main/java/com/fancv/config/WebSecurityConfig.java b/SpringBoot-Security/src/main/java/com/fancv/config/WebSecurityConfig.java
index be4e852..1aa47f6 100644
--- a/SpringBoot-Security/src/main/java/com/fancv/config/WebSecurityConfig.java
+++ b/SpringBoot-Security/src/main/java/com/fancv/config/WebSecurityConfig.java
@@ -41,7 +41,7 @@ protected void configure(AuthenticationManagerBuilder auth) throws Exception {
/**
* 开放/login和/oauth/authorize两个路径的匿名访问。前者用于登录,后者用于换授权码,这两个端点访问的时机都在登录之前。
- * 设置/login使用表单验证进行登录。
+ * 设置/login使用表单验证进行登录。 未生效
* @param http
* @throws Exception
*/
diff --git a/SpringBoot-Security/src/main/resources/application.yaml b/SpringBoot-Security/src/main/resources/application.yaml
index b9281ae..8c933c6 100644
--- a/SpringBoot-Security/src/main/resources/application.yaml
+++ b/SpringBoot-Security/src/main/resources/application.yaml
@@ -37,4 +37,4 @@ server:
logging:
level:
- root: debug
\ No newline at end of file
+ root: info
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index a769ffb..2317556 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,6 +31,8 @@
SpringBoot-OSS
SpringBoot-Commons
SpringBoot-DynamicDataSource
+ SpringBoot-Security
+ SpringBoot-JavaReactor