`

项目搭建记录

阅读更多
#JPA findAll方法,如何将Entity 转为 Dto
#rest风格,新增和更新,区别post,put
#mysql中id的自动生成
#API安全
#如果加上,创建时间和更新时间。  那么在响应操作时,应主动触发修改该字段
#如果加上,是否有效。  那么在查询时,应主动过滤无效
#时间格式转化
#配置SwaggerUI为默认入口
#返回值格式考虑
#异常处理
#ddl默认用utf-8
#swaggerUI时间格式修改
#修改数据状态时,首先check是否存在
#集成redis
#考虑不用Dto,直接通过jsonIgnore或者其他方式过滤掉隐藏属性
------------------------------------------------------------------
*列表分页
*查询条件处理
*熟悉JPA的使用
调用示例
数据初始化
调出Druid面板
更新保存&添加保存,考虑调用方式
-----------------------------------------------------
    <parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.4.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <springfox.version>2.7.0</springfox.version>
        <!-- skip maven unit test -->
        <maven.test.skip>true</maven.test.skip>
    </properties>

<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Dalston.SR4</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

      <dependency>
          <groupId>org.apache.commons</groupId>
          <artifactId>commons-lang3</artifactId>
          <version>${commons-lang3.version}</version>
      </dependency>
       <!-- druid连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.29</version>
        </dependency>
        <!--JPA-->
        <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-data-jpa</artifactId>
	</dependency>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>4.1.6</version>
        </dependency>
        <!-- MySQL -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!-- redis -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

        <!-- Swagger -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>${springfox.version}</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>${springfox.version}</version>
        </dependency>

        <!--json support LocalDate-->
        <dependency>
            <groupId>com.fasterxml.jackson.module</groupId>
            <artifactId>jackson-module-parameter-names</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.datatype</groupId>
            <artifactId>jackson-datatype-jdk8</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.datatype</groupId>
            <artifactId>jackson-datatype-jsr310</artifactId>
        </dependency>

        <!--eureka-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

    </dependencies>

    <build>
        <finalName>xxx-api-petStore</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>api.xxx.com.petstore.PetStoreAPIApplication</mainClass>
                    <classifier>exec</classifier>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.5</version>
            </plugin>
        </plugins>
    </build>
</project>


# server
server:
  port: 9124
# spring
spring:
#profiles
  profiles:
    active: dev
#jackson
  jackson:
    time-zone: GMT+8
    date-format: yyyy-MM-dd HH:mm:ss

#datasource
  datasource:
    # driver config
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.jdbc.Driver
    # connection pool config
    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
    maxPoolPreparedStatementPerConnectionSize: 20
    filters: stat,wall,log4j
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
#jpa
  jpa:
    database-platform: api.xxx.com.petstore.config.MySQL5DialectUTF8
#redis
  redis:
    pool:
      max-idle: 8
      min-idle: 0
      max-active: 8
      max-wait: -1

#mybatis
mybatis:
  type-aliases-package: api.xxx.com.petstore.entity
  mapper-locations: classpath*:/sqlMapperXml/*.xml
  configuration:
    map-underscore-to-camel-case: true
    use-generated-keys: true
    default-fetch-size: 100
    default-statement-timeout: 25000
    cache-enabled: true
    aggressive-lazy-loading: true
    lazy-loading-enabled: false



spring:
#datasource
  datasource:
    url: jdbc:mysql://192.168.0.105:3306/db_petstore?useUnicode=yes&characterEncoding=UTF-8
    username: xxx
    password: xxx
#jpa
  jpa:
#    hibernate:
#      ddl-auto: create
    show-sql: true
#redis
  redis:
    database: 4
    host: 192.168.0.123
    password: xxx
#    host: 127.0.0.1
    port: 6379
#mybatis
mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<!-- 使用 mvn mybatis-generator:generate -->
<generatorConfiguration>
    <properties resource="application-dev.yml"/>
    <classPathEntry location="E://maven_repository/mysql/mysql-connector-java/5.1.42/mysql-connector-java-5.1.42.jar" />
    <context id="tables" targetRuntime="MyBatis3" defaultModelType="flat">
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
            connectionURL="jdbc:mysql://192.168.0.103:3306/db_petstore?useUnicode=yes&amp;characterEncoding=UTF-8"
            userId="xxx"
            password="xxx">
        </jdbcConnection>
        <javaModelGenerator targetPackage="api.xxx.com.petstore.vo"
                            targetProject="src/main/java">
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <sqlMapGenerator targetPackage="sqlMapperXml"
                         targetProject="src/main/resources">
        </sqlMapGenerator>
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="api.xxx.com.petstore.mapper"
                             targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>

        <!-- schema:指定dao文件所属分类文件夹| doaminObjectName:指定生成对象名  -->
        <table schema="" tableName="sales_order" domainObjectName="SalesOrder" selectByExampleQueryId="false"
               enableCountByExample="false"
               enableDeleteByExample="false"
               enableUpdateByExample="false"
               enableSelectByExample="false">
            <generatedKey column="id" sqlStatement="assigned" identity="true"/>
        </table>
    </context>
</generatorConfiguration>


<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <contextName>logback</contextName>
    <!--输出到控制台-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!--输出到文件-->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>/data/logs/restapi-petstore/restapi-petstore.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- keep 90 days' worth of history -->
            <maxHistory>90</maxHistory>
        </rollingPolicy>
        <!--<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">-->
            <!--<maxFileSize>10MB</maxFileSize>-->
        <!--</triggeringPolicy>-->
        <encoder>
            <pattern>%d [%thread] %-5level %logger{36} H:${HOSTNAME} - SC:%X{optionalParam} %msg%n</pattern>
            <charset>UTF-8</charset>
            <immediateFlush>true</immediateFlush>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="file" />
    </root>
   
</configuration>

==========================

@Getter
@Setter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {

    @Id
    @GeneratedValue(generator = "system-uuid")
    @GenericGenerator(name="system-uuid",strategy = "uuid")
    @Column(name = "id", length = 32)
    private String id;

    @CreatedDate
    @JsonFormat(pattern = DateUtils.FORMAT_DATE_TIME)
    private Date createdDate;

    @LastModifiedDate
    @JsonFormat(pattern = DateUtils.FORMAT_DATE_TIME)
    private Date modifiedDate;

    @Column(name = "is_active")
    @JsonIgnore
    private boolean isActive = true;
}


=================================================
configs of java file
=================================================
public class MySQL5DialectUTF8 extends MySQL5InnoDBDialect {

    @Override
    public String getTableTypeString() {
        return " ENGINE=InnoDB DEFAULT CHARSET=utf8";
    }
}

@Configuration
@EnableJpaAuditing
@EnableTransactionManagement
@EnableSpringDataWebSupport
@MapperScan("api.xxx.com.petstore.mapper")
public class AppConfig {

    @Bean
    public PageHelper pageHelper() {
        PageHelper pageHelper = new PageHelper();
        Properties p = new Properties();
        p.setProperty("dialect", "mysql");
        p.setProperty("supportMethodsArguments", "true");
        p.setProperty("autoRuntimeDialect", "true");
        p.setProperty("offsetAsPageNum", "true");
        p.setProperty("rowBoundsWithCount", "true");
        p.setProperty("reasonable", "true");
        p.setProperty("returnPageInfo", "always");
        p.setProperty("params", "count=countSql");
        pageHelper.setProperties(p);
        return pageHelper;
    }
}

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    @SuppressWarnings("deprecation")
    public Docket petStoreApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(petStoreApiInfo())
                .useDefaultResponseMessages(false)
                .select()
                .apis( input -> {
                    Class<?> declaringClass = input.declaringClass();
                    String pkg = declaringClass.getPackage().getName();
                    if(!pkg.matches("api.xxx.com.petstore.*")) //非本项目,排除
                        return false;
                    if (declaringClass == BasicErrorController.class)// 排除
                        return false;
                    if(declaringClass.isAnnotationPresent(RestController.class)) // 被注解的类
                        return true;
                    if(input.isAnnotatedWith(ResponseBody.class)) // 被注解的方法
                        return true;
                    return false;
                })
                .build();
    }

    private ApiInfo petStoreApiInfo() {
        return new ApiInfoBuilder()
                .title("xxx后台API")
                .description("xxx后台接口支持")
                .version("1.0")
                .contact(new Contact("xxxChengdu RD", "http://xxx.com", "cd@xxx.com"))
                .build();
    }
}


@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addViewControllers(ViewControllerRegistry registry){
        registry.addRedirectViewController("/", "/swagger-ui.html");
    }
}



分享到:
评论

相关推荐

    Python项目事件记录系统源码.zip

    Python项目事件记录系统 内部项目较多,但管理较为混乱。各个干系人之间也不了解其余项目干系人对项目的推进情况。 功能设计 有人员管理,能够新增人员 能够修改人员 有权限管理,控制谁能新增项目,谁能管理项目,...

    react-一步一步搭建一个react项目环境

    这个仓库我将会记录如何从零到一搭建出一个基于react和webpack的项目的开发环境,算是对自己工作以及学习的一种记录,同时也希望可以帮助到一些希望自己搭建项目却不知如何下手的同学。

    Spring项目搭建

    Spring项目搭建,包括使用junit的测试,本人学习记录之用。不保证可用性

    IDEA创建SpringBoot项目步骤记录

    IDEA创建SpringBoot项目步骤记录,记录了从项目开始创建到运行的过程

    基于vue-cli搭建自己的移动端项目.zip

    个人足迹记录,上传基于vue-cli搭建自己的移动端项目。

    电商项目框架搭建

    是一个电商项目的基本搭建,包含六个子项目。主要是针对里面基本的配置文件做记录。

    Frida开发环境搭建记录

    Frida在环境搭建中会遇到各种问题 一、Frida版本问题 由于frida版本更新极快,不断修复bug,不断增加新特性,因此建议使用较新版本的server,较新版本的frida,较新版本的frida-tools。 手机上的server版本和电脑上...

    Koa项目搭建过程详细记录

    本文介绍了Koa项目搭建过程详细记录,分享给大家,具体如下: Java中的Spring MVC加MyBatis基本上已成为Java Web的标配。Node JS上对应的有Koa、Express、Mongoose、Sequelize等。Koa一定程度上可以说是Express的...

    ubuntu搭建Java项目运行环境-随笔记录.rar

    简单记录了基于Ubuntu系统中搭建jdk1.8、mysql5.7、Tomcat9环境的方式,同时记录了修改数据库用户密码的过程

    maven项目搭建管理,简单demo,附普通项目

    先说明数据库就放一条记录不要多放,我是对象接受的。maven+SpringMVC+Spring+Oracle+mybatis。简单demo适合新手学习

    git+repo+gerrit代码服务器搭建

    git+repo+gerrit代码评审服务器搭建流程详细步骤,一步步教你搭建完整的代码评审服务器,本人亲自搭建流程记录,验证通过

    搭建咖啡兔的演示项目

    选择kft-activiti-demo-no-maven项目进行搭建,由于对java技术不熟悉,所以搭建环境的过程中引出了各种问题,本文将详细记录搭建的步骤,以避免后来人继续掉坑里

    vue搭建的pc端项目

    vue搭建的pc端项目

    NodeJS基础API搭建服务器详细过程记录

    本文所搭建的项目将不会使用express等后端框架,仅使用最基础的NodeJS API,按照MVC设计模式的思路进行编码和讲解,交流意见。源代码地址如下,建议下载源码边看博客边对照源码才能比较快理解整个过程。...

    Maven 简易安装到项目搭建教程

    在工作过程中,由于接触的项目多了,就想自己先搭一个私服练一下,顺便把整个过程稍微记录一下,然后整理成文档,共享给大家,把用到的全部打包,希望可以对初学MAVEN的有所帮助,不足的地方请大家指出,共通学习...

    基于整洁架构搭建的个人IM开源项目

    基于整洁架构搭建的个人IM开源项目,通过Netty实现和前端websocket连接。内含有登录,成员列表,联系人, 群组,群组成员,好友,好友分组,黑名单,消息记录,消息撤回,消息已读,消息点赞,还有很多小轮子项目 ...

    maven和intellij来搭建SSH框架的项目源码

    用maven和intellij来搭建SSH框架,实现了一个用户注册界面,用户输入用户名和密码并提交之后,将信息自动记录到数据库中

    毕设项目——基于SSM的大学生食堂外卖点餐系统(内含搭建流程)

    文件包括:搭建流程、表结构设计说明、项目说明书、项目代码、环境安装包、数据库脚本。 技术包括:Spring、SpringMVC、Mybatis、MySQL、JSP、BootStrap、LayUI、AJAX、HTML、CSS、JS。 功能包括: 食堂管理员:登录...

    scrapy爬虫框架的依赖库搭建和项目创建

    上篇我们记录了Scrapy的各个组件功能,这篇我们来动手scrapy爬虫框架的依赖库搭建和项目创建,开始进入进阶实战。

Global site tag (gtag.js) - Google Analytics