准备工作

JDK >= 1.8 IntelliJ IDEA > 2016

IntelliJ IDEA必装插件

  • .ignore 编辑.gitignore文件
  • Free MyBatis plugin MyBatis导航定位
  • Lombok Plugin 自动生成GetSet方法
  • Maven Helper Maven快捷操作
  • Translation 翻译插件
  • restfultoolkit 根据 URL 直接跳转到对应的方法定义,一个简单的 http 请求工具

配置Maven私服

如果没有私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的maven仓库下载到本地,而一个团队中的所有人都重复的从maven仓库下载构件,这样就加大了中央仓库的负载和浪费了外网的带宽,如果网速慢的话还会影响项目的进程。为团队创建私服,可以让公司的团队共享一套构件,加快了项目搭建的进程。所以我们选择用Nexus创建私服。

私服的搭建由公司统一完成,我们只需要添加一个配置文件就可以从私服下载类库了,要设置私服只需要在mirrors节点内添加子节点mirror即可。

标准maven配置文件:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  5. <!-- 本地仓库的位置 用户目录下的.m2为maven用户主目录-->
  6. <localRepository>${user.home}/.m2/repository</localRepository>
  7. <pluginGroups>
  8. </pluginGroups>
  9. <proxies>
  10. </proxies>
  11. <servers>
  12. </servers>
  13. <mirrors>
  14. </mirrors>
  15. <profiles>
  16. </profiles>
  17. </settings>
  1. 公司内网私服
  1. <mirror>
  2. <id>nexus-releases</id>
  3. <url>http://192.168.1.239:8081/repository/maven-public/</url>
  4. <mirrorOf>*</mirrorOf>
  5. </mirror>
  1. 阿里私服
  1. <mirror>
  2. <id>alimaven</id>
  3. <name>aliyun maven</name>
  4. <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  5. <mirrorOf>central</mirrorOf>
  6. </mirror>
  1. Maven中央仓库
  1. <mirror>
  2. <id>Central</id>
  3. <mirrorOf>central</mirrorOf>
  4. <name>Central Repository</name>
  5. <url>http://central.maven.org/maven2/</url>
  6. </mirror>

相关配置文件在共享文件夹 \\192.168.1.199\lyy\西安交通信息业务软件开发框架\maven 中,可以直接复制。

IDEA在默认情况下,读取maven配置文件的位置在用户目录下的.m2目录只需要把配置文件复制到.m2目录即可。如果需要手动设置IDEA中maven的配置文件,设置路径:PreferencesBuild,Executeion,DeploymentBuild ToolsMaven
image.png
红色标注的地方,选择新的路径。

新建项目

1. 新建Spring Boot项目

image.png

在新建之前需要设置Jdk,依次输入Group:com.xci,Artifact:bus-schedule-server,Name:bus-schedule-server,Package:com.xci.bus.schedule,在下一页的依赖中选择 WebSpring Web Starter,完成项目创建。

2. 设置pom.xml文件

用下面节点的内容替换原配置文件

  1. <parent>
  2. <artifactId>xci-framework</artifactId>
  3. <groupId>com.xci</groupId>
  4. <version>1.2.18</version>
  5. </parent>
  6. <properties>
  7. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  8. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  9. <java.version>1.8</java.version>
  10. </properties>
  11. <dependencies>
  12. <dependency>
  13. <groupId>com.xci</groupId>
  14. <artifactId>xci-core</artifactId>
  15. <version>1.2.2</version>
  16. </dependency>
  17. <dependency>
  18. <groupId>com.xci</groupId>
  19. <artifactId>xci-sys</artifactId>
  20. <version>1.2.9</version>
  21. </dependency>
  22. <dependency>
  23. <groupId>org.springframework.boot</groupId>
  24. <artifactId>spring-boot-configuration-processor</artifactId>
  25. <optional>true</optional>
  26. </dependency>
  27. <dependency>
  28. <groupId>org.projectlombok</groupId>
  29. <artifactId>lombok</artifactId>
  30. <optional>true</optional>
  31. </dependency>
  32. <dependency>
  33. <groupId>org.springframework.boot</groupId>
  34. <artifactId>spring-boot-starter-test</artifactId>
  35. <scope>test</scope>
  36. </dependency>
  37. <dependency>
  38. <groupId>jdbc.driver.oracle</groupId>
  39. <artifactId>ojdbc6</artifactId>
  40. <version>11.1.0.7.0</version>
  41. </dependency>
  42. </dependencies>
  43. <build>
  44. <plugins>
  45. <plugin>
  46. <groupId>org.springframework.boot</groupId>
  47. <artifactId>spring-boot-maven-plugin</artifactId>
  48. <executions>
  49. <execution>
  50. <goals>
  51. <goal>repackage</goal>
  52. </goals>
  53. </execution>
  54. </executions>
  55. </plugin>
  56. </plugins>
  57. </build>

3. 修改.gitignore文件

4. 新建ehcache.xml文件

resources目录下新建缓存配置文件ehcache.xml

5. 新建logback-spring.xml文件

resources目录下新建日志配置文件logback-spring.xml

6. 修改application.properties文件

resources目录下修改项目主配置文件application.properties

  1. #服务器端口
  2. server.port=8321
  3. #Json序列化时区
  4. spring.jackson.time-zone=GMT+8
  5. #Json序列化默认日期格式
  6. spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
  7. #是否启用文件上传
  8. spring.servlet.multipart.enabled=true
  9. #文件上传单个文件大小
  10. spring.servlet.multipart.max-file-size=50MB
  11. #文件上传单次请求大小
  12. spring.servlet.multipart.max-request-size=100MB
  13. #缓存类型
  14. spring.cache.type=ehcache
  15. #缓存配置文件
  16. spring.cache.ehcache.config=classpath:/ehcache.xml
  17. #===========================数据源公共属性===========================#
  18. #是否启用动态数据源
  19. xci.dynamic-datasource.enabled=false
  20. #数据连接池类型
  21. spring.datasource.type=com.zaxxer.hikari.HikariDataSource
  22. #连接池中允许的最大连接数。缺省值:10;推荐的公式:((core_count * 2) + effective_spindle_count)
  23. spring.datasource.hikari.maximum-pool-size=20
  24. #连接只读数据库时配置为true, 保证安全
  25. spring.datasource.hikari.read-only=false
  26. #等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省:30秒
  27. spring.datasource.hikari.connection-timeout=5000
  28. #一个连接idle状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟
  29. spring.datasource.hikari.idle-timeout=600000
  30. #一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟,建议设置比数据库超时时长少30秒,参考MySQL wait_timeout参数(show variables like '%timeout%';)
  31. spring.datasource.hikari.max-lifetime=1800000
  32. #分页合理化参数,防止出现无效的分页参数
  33. pagehelper.reasonable=true
  34. #允许在运行时根据多数据源自动识别对应方言的分页
  35. pagehelper.auto-runtime-dialect=true
  36. #mybatis文件地址
  37. mybatis.mapper-locations=classpath*:mapper/**/*.xml
  38. #使用驼峰和中划线字段进行转换
  39. mybatis.configuration.map-underscore-to-camel-case=true
  40. #为制定Jdbc类型的字段使用null
  41. mybatis.configuration.jdbc-type-for-null=null
  42. #===========================数据源公共属性===========================#
  43. #===========================单数据源配置===========================#
  44. #数据库驱动
  45. spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
  46. #数据库IP
  47. spring.datasource.url=jdbc:oracle:thin:@192.168.1.226/testorcl
  48. #数据库账号
  49. spring.datasource.hikari.username=gjzn
  50. #数据库密码
  51. spring.datasource.hikari.password=gjzn
  52. #分页插件类型,可以使用下面的缩写值:oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby
  53. pagehelper.helperDialect=oracle
  54. #===========================单数据源配置===========================#
  55. #是否启用文档
  56. xci.swagger.enabled=true
  57. #是否开启文档认证
  58. swagger.basic.enable=true
  59. #认证用户名
  60. swagger.basic.username=xci
  61. #认证密码
  62. swagger.basic.password=xci
  63. #日志配置文件路径
  64. #logging.config=logback-spring.xml
  65. #上传根目录
  66. xci.upload.root=/uploads
  67. #上传单个文件允许的大小,单位KB
  68. xci.upload.allow-max-size=10240
  69. #允许文件上传的扩展名
  70. xci.upload.allow-extension=gif, jpg, jpeg, png, bmp, flv, mp3, mp4, wav, wma, avi, mpg, rmvb,zip, rar, doc, docx, xls, xlsx, ppt, pptx, txt, pdf,xml,repx
  71. #服务器名称
  72. xci.api.name=本地服务器
  73. #接口验证应用系统
  74. xci.api.valid-app=true
  75. #接口验证时间戳
  76. xci.api.valid-timestamp=false
  77. #接口验证时间戳偏差单位秒
  78. xci.api.timestamp-expire-offset=120

6.1 Oracle数据库

执行Oracle建库脚本,之后执行数据初始化脚本,执行完成后修改配置文件中的数据源。

  1. #===========================单数据源===========================#
  2. #数据库驱动
  3. spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
  4. #数据库IP
  5. spring.datasource.url=jdbc:oracle:thin:@192.168.1.226/testorcl
  6. #数据库账号
  7. spring.datasource.hikari.username=gjzn
  8. #数据库密码
  9. spring.datasource.hikari.password=gjzn
  10. #分页插件数据库类型
  11. pagehelper.helperDialect=oracle
  12. #===========================单数据源===========================#

6.2 SQLServer数据库

执行SQLServer建库脚本,之后执行数据初始化脚本,执行完成后修改配置文件中的数据源。

  1. #===========================单数据源===========================#
  2. #数据库驱动
  3. spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
  4. #数据库IP
  5. spring.datasource.url=jdbc:sqlserver://192.168.1.226:1433;DatabaseName=xci_parent
  6. #数据库账号
  7. spring.datasource.hikari.username=sa
  8. #数据库密码
  9. spring.datasource.hikari.password=server2008.newcom
  10. #分页插件数据库类型
  11. pagehelper.helperDialect=sqlserver
  12. #===========================单数据源===========================#

6.3 MySQL数据库

执行MySQL建库脚本,之后执行数据初始化脚本,执行完成后修改配置文件中的数据源。

  1. #===========================单数据源===========================#
  2. #数据库驱动
  3. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  4. #数据库IP
  5. spring.datasource.url=jdbc:mysql://localhost:3306/xci_parent?useUnicode=true&characterEncoding=UTF-8&useSSL=false&zeroDateTimeBehavior=convertToNull
  6. #数据库账号
  7. spring.datasource.hikari.username=root
  8. #数据库密码
  9. spring.datasource.hikari.password=root
  10. #分页插件数据库类型
  11. pagehelper.helperDialect=mysql
  12. #===========================单数据源===========================#

7. 新建项目包

在项目中新建以下包,用来将不同的代码放到不同的位置,具体含义如下:

  • api 存放系统Api接口相关的Controller
  • config 存放系统相关的配置和组件注入类
  • dao 存放系统数据访问层代码
  • entity 存放系统数据库实体层代码
  • runner 存放需要系统启动时自动初始化的代码
  • service 存放系统业务服务层代码

8. 新建SysRunner文件

在包runner下面新建类SysRunner,用来初始化系统用户权限等模块的缓存。

  1. /**
  2. * 应用程序启动后系统缓存初始化
  3. * @author 吕艳阳
  4. */
  5. @Order(value = 0)
  6. @Component
  7. public class SysRunner implements ApplicationRunner {
  8. @Resource
  9. private AppService appService;
  10. @Resource
  11. private UserService userService;
  12. @Resource
  13. private DeptService deptService;
  14. @Resource
  15. private ParamService paramService;
  16. @Resource
  17. private DicService dicService;
  18. @Resource
  19. private ReportService reportService;
  20. @Override
  21. public void run(ApplicationArguments args) {
  22. appService.refreshCache();
  23. userService.refreshCache();
  24. deptService.refreshCache();
  25. paramService.refreshCache();
  26. dicService.refreshCache();
  27. reportService.refreshCache();
  28. }
  29. }

9. 新建WebMvcConfig文件

在包config下新建WebMvcConfig.java,表示Spring MVC配置类。

10. 新建SwaggerConfig文件

在包config下新建SwaggerConfig, Api接口文档配置类。

  1. /**
  2. * Api接口文档配置
  3. * @author 吕艳阳
  4. */
  5. @Configuration
  6. @EnableSwagger2
  7. @EnableSwaggerBootstrapUI
  8. @ConditionalOnProperty(name = "xci.swagger.enabled", havingValue = "true")
  9. public class SwaggerConfig {
  10. @Resource
  11. private SwaggerProperties swaggerProperties;
  12. /**
  13. * 设置系统分组接口相关信息
  14. */
  15. @Bean
  16. @Order(value = 1) //显示为第一项
  17. public Docket sysRestApi() {
  18. List<Parameter> ps = Lists.newArrayList();
  19. return new Docket(DocumentationType.SWAGGER_2)
  20. .apiInfo(apiInfo()) //此接口对应的文档信息
  21. .groupName("系统权限接口") //分组接口名称
  22. .select()
  23. .apis(RequestHandlerSelectors.basePackage("com.xci.sys")) //分组接口扫描的包路径
  24. .paths(PathSelectors.any())
  25. .build()
  26. .globalOperationParameters(ps);
  27. }
  28. /**
  29. * 设置业务分组接口相关信息
  30. */
  31. @Bean
  32. @Order(value = 2) //显示为第二项
  33. public Docket groupRestApi() {
  34. return new Docket(DocumentationType.SWAGGER_2)
  35. .apiInfo(apiInfo()) //此接口对应的文档信息
  36. .groupName("收费管理系统接口") //分组接口名称
  37. .select()
  38. .apis(RequestHandlerSelectors.basePackage("com.xci.operation.management.api")) //分组接口扫描的包路径
  39. .paths(PathSelectors.any())
  40. .build();
  41. }
  42. /**
  43. * 设置文档的相关信息
  44. */
  45. private ApiInfo apiInfo() {
  46. return new ApiInfoBuilder()
  47. .title("XCI客户收费管理系统") //文档标题
  48. .description("描述") //文档描述
  49. .termsOfServiceUrl("") //项目或者团队网站
  50. .contact(new Contact("吕艳阳", "", "lvyanyang@xci96716.com")) //项目或者负责人联系方式
  51. .version("1.0") //文档版本
  52. .build();
  53. }
  54. }

11. 新建GlobalExceptionHandler文件

在包config下新建GlobalExceptionHandler.java, 全局异常处理类。

12. 修改项启动类

  1. /**
  2. * 项目启动类
  3. * @author 吕艳阳
  4. */
  5. @EnableCaching
  6. @EnableTransactionManagement
  7. @MapperScan(basePackages = {"com.xci.sys.dao","系统包路径.dao"})
  8. @SpringBootApplication(scanBasePackages = {"com.xci.sys", "系统包路径"})
  9. public class BusScheduleServerApplication {
  10. public static void main(String[] args) {
  11. ApplicationContext app = SpringApplication.run(BusScheduleServerApplication.class, args);
  12. SpringHelper.setApplicationContext(app);
  13. }
  14. }
  1. 代码生成器

代码生成器脚本

恭喜,此时**服务端**已配置完成。