引入maven依赖即可使用framework:
<dependency> <groupId>com.jztey</groupId> <artifactId>framework</artifactId> </dependency>
需要注意的是framework包含内容森罗万象,为了避免造成依赖传递,framework里面的所有依赖scope均设置为provided,需要使用framework哪部分自行引用依赖
整个公司maven版本库分为两个版本:DEV-SNAPSHOT 和 PROD-SNAPSHOT。开发环境及代码中一律使用DEV-SNAPSHOT,PROD-SNAPSHOT 仅由运维打包生产环境时使用。
打包生产环境:
mvn -N versions:set -DnewVersion=PROD-SNAPSHOT mvn deploy #如需还原: versions:revert clean
MVC
为了兼容spring-cloud,简化代码,参照JAX-RS,MVC去掉controller层,直接将service对外暴露。所有restful接口均要求写到interface中,实现类中不可以出现与http相关的内容,该interface既是spring-cloud的feign client也是dubbo的Reference。由于springMVC不支持方法参数注解继承,因此需要改造。
在springboot项目的Application.java类中导入
@Import({ ApplicationInterfaceMvc.class }) public class Application { ... }
使用Swagger注解以便自动产生api文档 import io.swagger.annotations.*;
自动生成api文档,在swagger注解所在工程的pom文件添加
<build> <plugins> <plugin> <groupId>com.github.kongchen</groupId> <artifactId>swagger-maven-plugin</artifactId> <configuration> <apiSources> <apiSource> <springmvc>true</springmvc> <locations><location>com.jztey.redmine</location></locations> <schemes><scheme>http</scheme></schemes> <host>test-api.998jk.com</host> <basePath>/redmine</basePath> <info> <title>redmine报表项目</title> <version>v1</version> <description>统计remine信息,产生报表并定时发送</description> </info> <swaggerDirectory>${basedir}/../doc</swaggerDirectory> </apiSource> </apiSources> </configuration> </plugin> </plugins> </build>
执行mvn swagger:generate 生成api文档
统一异常处理:RestfulGlobalExceptionHandler RestfulResultException。异常统一返回RestfulResult json串。
表单验证:使用JSR-303 javax.validation包下相关类。注意:由于spring仅支持bean注解,@PathVariable尚不支持。
Cache
Encrypt
Security
Dubbo
要使用dubbo,需要在工程中加入如下依赖
<!-- dubbo --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> </dependency> <dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> </dependency>
并在springboot项目的Application.java类中导入
@Import({ ApplicationDubbo.class }) public class Application { ... }
在application.properties进行如下配置
#微服务唯一标识,总是放在第一行 spring.application.name=redmine ... #dubbo配置 dubbo.application.name=${spring.application.name} dubbo.registry.protocol=zookeeper dubbo.registry.address=10.3.5.36:2181,10.3.5.38:2181,10.3.5.42:2181 dubbo.annotation.package=com.jztey.${spring.application.name} dubbo.protocol.port=20880 可选配置,设置dubbo端口,一台物理机部署多个微服务时才需要指定不同端口dubbo.provider.timeout=15000 可选配置,设置超时时间dubbo.consumer.check=false 可选配置,禁用启动依赖检查
Druid
要使用druid连接池,需要在工程中加入如下依赖
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </dependency>
并在springboot项目的Application.java类中导入
@Import({ ApplicationDruid.class }) public class Application { ... }
Monitoring
要使用监控,需要在工程中开启Druid并加入如下依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
并在springboot项目的Application.java类中导入
@Import({ ApplicationDruid.class, ApplicationMonitoring.class }) public class Application { ... }
在application.properties进行如下配置
#微服务唯一标识,总是放在第一行 spring.application.name=redmine ... #日志 logging.file=${spring.application.name}.log #logging.level.root=DEBUG
默认actuator监控路径为 /monitoring/health, druid健康路径为 /monitoring/druid/index.html, 默认账号密码为admin/admin
配置application.properties logging.file=${spring.application.name}.log 后可以在 /monitoring/logfile 看到服务器日志, 更多监控endpoint请参照springboot文档