完整的springboot工程

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS AI 助手,专业版
简介:

spring-boot出乎意料的好用,本文给大家展示生产实践中怎么用spring-boot。

工程结构代码 收藏代码

whatsmars-spring-boot  
  |-src  
    |-java  
      |-com.itlong.whatsmars.spring.boot  
         Application.java  
         BeanConfig.java  
         UserConfig.java  
         UserController.java  
         UserService.java  
    |-resources  
      |-mapper  
         User-mapper.xml  
      |-static  
         red.jpg  
      |-templates  
         index.html  
       application.properties  
       application-bean.xml  
       application-dev.properties  
       application-prod.properties  
       application-test.properties  
       log4j2.xml  
       mybatis-config.xml  
  pom.xml  

Xml代码 收藏代码

<?xml version="1.0" encoding="UTF-8"?>  
<project xmlns="http://maven.apache.org/POM/4.0.0"  
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  

    <modelVersion>4.0.0</modelVersion>  

    <artifactId>whatsmars-spring-boot</artifactId>  
    <packaging>jar</packaging>  
    <name>${project.artifactId}</name>  
    <url>http://maven.apache.org</url>  

    <properties>  
        <!-- The main class to start by executing java -jar -->  
        <start-class>com.itlong.whatsmars.spring.boot.Application</start-class>  
    </properties>  

    <parent>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-parent</artifactId>  
        <version>1.5.2.RELEASE</version>  
    </parent>  

    <dependencies>  
        <dependency>  
            <groupId>org.mybatis.spring.boot</groupId>  
            <artifactId>mybatis-spring-boot-starter</artifactId>  
            <version>1.1.1</version>  
            <exclusions>  
                <exclusion>  
                    <groupId>org.springframework.boot</groupId>  
                    <artifactId>spring-boot-starter-logging</artifactId>  
                </exclusion>  
                <exclusion>  
                    <groupId>ch.qos.logback</groupId>  
                    <artifactId>logback-classic</artifactId>  
                </exclusion>  
            </exclusions>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-web</artifactId>  
            <exclusions>  
                <exclusion>  
                    <groupId>ch.qos.logback</groupId>  
                    <artifactId>logback-classic</artifactId>  
                </exclusion>  
                <!--<exclusion>  
                    <groupId>org.springframework.boot</groupId>  
                    <artifactId>spring-boot-starter-tomcat</artifactId>  
                </exclusion>-->  
            </exclusions>  
        </dependency>  
        <!-- <dependency>  
             <groupId>org.springframework.boot</groupId>  
             <artifactId>spring-boot-starter-jetty</artifactId>  
         </dependency>-->  

        <dependency>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-actuator</artifactId>  
            <exclusions>  
                <exclusion>  
                    <groupId>org.springframework.boot</groupId>  
                    <artifactId>spring-boot-starter-logging</artifactId>  
                </exclusion>  
            </exclusions>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-aop</artifactId>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-test</artifactId>  
            <scope>test</scope>  
        </dependency>  
        <!-- 开启如下依赖后,应用会自动检测相关配置 -->  
        <!--<dependency>  
            <groupId>org.springframework.session</groupId>  
            <artifactId>spring-session</artifactId>  
        </dependency>-->  
        <!--<dependency>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-data-redis</artifactId>  
        </dependency>-->  
        <dependency>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-log4j2</artifactId>  
        </dependency>  
        <dependency>  
            <groupId>commons-dbcp</groupId>  
            <artifactId>commons-dbcp</artifactId>  
            <version>1.4</version>  
        </dependency>  
        <dependency>  
            <groupId>mysql</groupId>  
            <artifactId>mysql-connector-java</artifactId>  
        </dependency>  

        <dependency>  
            <groupId>com.github.pagehelper</groupId>  
            <artifactId>pagehelper</artifactId>  
            <version>4.1.6</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-thymeleaf</artifactId>  
        </dependency>  

    </dependencies>  

    <build>  
        <finalName>${project.artifactId}</finalName>  
        <resources>  
            <resource>  
                <directory>src/main/resources</directory>  
                <!--<includes>  
                    <include>**/*.properties</include>  
                    <include>**/*.xml</include>  
                    <include>**/*.html</include>  
                </includes>-->  
                <filtering>true</filtering>  
            </resource>  
        </resources>  
        <plugins>  
            <!-- 该插件会使package打出一个可直接运行的jar包,即该jar包包含了依赖的所有jar包 -->  
            <plugin>  
                <groupId>org.springframework.boot</groupId>  
                <artifactId>spring-boot-maven-plugin</artifactId>  
                <dependencies>  
                    <!-- 使用SpringLoaded热部署 -->  
                    <dependency>  
                        <groupId>org.springframework</groupId>  
                        <artifactId>springloaded</artifactId>  
                        <version>1.2.6.RELEASE</version>  
                    </dependency>  
                </dependencies>  
                <!-- POM不是继承spring-boot-starter-parent的话,需要下面的指定 -->  
                <!--<configuration>  
                    <mainClass>${start-class}</mainClass>  
                    <layout>ZIP</layout>  
                </configuration>  
                <executions>  
                    <execution>  
                        <goals>  
                            <goal>repackage</goal>  
                        </goals>  
                    </execution>  
                </executions>-->  
            </plugin>  
        </plugins>  
    </build>  


</project>  

application.properties
Properties代码 收藏代码

#spring.profiles.active=prod  

#spring.profiles.active=dev  

spring.profiles.active=test  

application-test.properties
Properties代码 收藏代码

server.port: 80  

spring.session.store-type=redis  
server.session.timeout=14400  

#server.session.cookie.domain=${toutiao.domain}  
#server.session.cookie.http-only=true  
#server.session.cookie.path=/  

#监控  
#management.port: 9900  
#management.address: 127.0.0.1  

#server.contextPath=/user  

server.tomcat.uri-encoding=UTF-8  
server.tomcat.basedir=/data/wely/logs  

server.tomcat.accesslog.directory=logs  
server.tomcat.accesslog.enabled=true  
server.tomcat.accesslog.pattern=common  
server.tomcat.accesslog.prefix=access_log  
server.tomcat.accesslog.suffix=.log  

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/wely?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true  
spring.datasource.username=root  
spring.datasource.password=123456  
spring.datasource.driver-class-name=com.mysql.jdbc.Driver  
spring.datasource.tomcat.min-idle=10  
spring.datasource.tomcat.max-idle=50  
spring.datasource.tomcat.max-active=100  
spring.datasource.tomcat.max-wait=10000  
spring.datasource.tomcat.max-age=10000  
spring.datasource.tomcat.test-on-borrow=true  
spring.datasource.tomcat.test-on-return=false  
spring.datasource.tomcat.test-while-idle=true  
spring.datasource.tomcat.time-between-eviction-runs-millis=5000  
spring.datasource.tomcat.validation-query=SELECT 1  

mybatis.config-location=classpath:mybatis-config.xml  

# REDIS (RedisProperties)  
spring.redis.host=127.0.0.1  
spring.redis.password=123456  
spring.redis.pool.max-active=8  
spring.redis.pool.max-idle=8  
spring.redis.pool.max-wait=-1  
spring.redis.pool.min-idle=1  
spring.redis.port=6379  
spring.redis.timeout=0  

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss  

toutiao.domain=www.toutiao.im  
toutiao.loginCallback=http://${toutiao.domain}/user/login  
toutiao.logoutCallback=http://${toutiao.domain}/  
toutiao.loginSuccessIndex=http://${toutiao.domain}/index.html  

user.welcome=Hello, World!  
user.noFilterUrl=/,/login  

spring.thymeleaf.cache=false  

application-bean.xml spring-boot追求无xml配置,但仍可以加载xml配置
Xml代码 收藏代码

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
       xsi:schemaLocation="http://www.springframework.org/schema/beans  
                           http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"  
       default-autowire="byName">  

    <bean id="userService" class="com.itlong.whatsmars.spring.boot.UserService"></bean>  

</beans>  

index.html
Html代码 收藏代码

<!DOCTYPE html>  
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"  
      xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">  
<head>  
    <title>thymeleaf</title>  
</head>  
<body>  
<h1 th:inline="text">thymeleaf</h1>  
<p th:text="${hello}"></p>  
</body>  
</html>  

Java代码 收藏代码

@SpringBootApplication  
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})  
@EnableConfigurationProperties({UserConfig.class})  
public class Application {  

    public static void main(String[] args) {  
        SpringApplication.run(Application.class, args);  
    }  

}  

注意,Application类所在包及子包下的所有类默认均在ComponentScan非为内。

Java代码 收藏代码

@Controller  
public class UserController {  

    @Autowired  
    private UserConfig userConfig;  

    @RequestMapping("/")  
    public String home(Map<String,Object> map) {  
        map.put("hello", "Hi, boy!");  
        return "index";  
    }  

    @RequestMapping("/do")  
    @ResponseBody  
    public String doSth() {  
        return userConfig.getWelcome();  
    }  

}  

Java代码 收藏代码

@ConfigurationProperties(prefix="user")  
public class UserConfig {  

    private String welcome;  

    private List<String> noFilterUrl;  

    public String getWelcome() {  
        return welcome;  
    }  

    public void setWelcome(String welcome) {  
        this.welcome = welcome;  
    }  

    public List<String> getNoFilterUrl() {  
        return noFilterUrl;  
    }  

    public void setNoFilterUrl(List<String> noFilterUrl) {  
        this.noFilterUrl = noFilterUrl;  
    }  
}  

Java代码 收藏代码

@Configuration  
@ImportResource(locations={"classpath:application-bean.xml"})  
public class BeanConfig {  
}  

Java代码 收藏代码

public class UserService {  

    private final Logger logger = LogManager.getLogger(getClass());  

    public UserService() {  
        logger.info("UserService init...");  
        System.out.println("UserService init...");  
    }  
}  

Xml代码 收藏代码

<?xml version="1.0" encoding="UTF-8"?>  
<configuration status="debug">  

    <properties>  
        <property name="logPath">/data/wely/logs</property>  
    </properties>  

    <appenders>  
        <console name="Console" target="SYSTEM_OUT">  
            <Filters>  
                <ThresholdFilter level="DEBUG" onMatch="ACCEPT"  
                                 onMismatch="DENY"/>  
            </Filters>  
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] [%t] - [%X{sid}] %c{1.} - %m%n"/>  
        </console>  

        <RollingFile name="RollingFileDebug" fileName="${logPath}/debug.log"  
                     filePattern="${logPath}/$${date:yyyy-MM-dd}/debug-%d{yyyy-MM-dd}-%i.log">  
            <Filters>  
                <ThresholdFilter level="INFO" onMatch="DENY"  
                                 onMismatch="ACCEPT"/>  
                <ThresholdFilter level="DEBUG" onMatch="ACCEPT"  
                                 onMismatch="DENY"/>  
            </Filters>  
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] [%t] - [%X{sid}] %c{1.} - %m%n"/>  
            <Policies>  
                <TimeBasedTriggeringPolicy/>  
                <SizeBasedTriggeringPolicy size="100 MB"/>  
            </Policies>  
        </RollingFile>  

        <RollingFile name="RollingFileInfo" fileName="${logPath}/info.log"  
                     filePattern="${logPath}/$${date:yyyy-MM-dd}/info-%d{yyyy-MM-dd}-%i.log">  
            <Filters>  
                <ThresholdFilter level="INFO"/>  
                <ThresholdFilter level="WARN" onMatch="DENY"  
                                 onMismatch="NEUTRAL"/>  
            </Filters>  
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] [%t] - [%X{sid}] %c{1.} - %m%n"/>  
            <Policies>  
                <TimeBasedTriggeringPolicy/>  
                <SizeBasedTriggeringPolicy size="100 MB"/>  
            </Policies>  
        </RollingFile>  

        <RollingFile name="RollingFileWarn" fileName="${logPath}/warn.log"  
                     filePattern="${logPath}/$${date:yyyy-MM-dd}/warn-%d{yyyy-MM-dd}-%i.log">  
            <Filters>  
                <ThresholdFilter level="WARN"/>  
                <ThresholdFilter level="ERROR" onMatch="DENY"  
                                 onMismatch="NEUTRAL"/>  
            </Filters>  
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] [%t] - [%X{sid}] %c{1.} - %m%n"/>  
            <Policies>  
                <TimeBasedTriggeringPolicy/>  
                <SizeBasedTriggeringPolicy size="100 MB"/>  
            </Policies>  
        </RollingFile>  

        <RollingFile name="RollingFileError" fileName="${logPath}/error.log"  
                     filePattern="${logPath}/$${date:yyyy-MM-dd}/error-%d{yyyy-MM-dd}-%i.log">  
            <ThresholdFilter level="ERROR"/>  
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] [%t] - [%X{sid}] %c{1.} - %m%n"/>  
            <Policies>  
                <TimeBasedTriggeringPolicy/>  
                <SizeBasedTriggeringPolicy size="100 MB"/>  
            </Policies>  
        </RollingFile>  

        <RollingFile name="RollingFileTrace" fileName="${logPath}/trace.log"  
                     filePattern="${logPath}/$${date:yyyy-MM-dd}/trace-%d{yyyy-MM-dd}-%i.log">  
            <ThresholdFilter level="TRACE" onMatch="ACCEPT" onMismatch="DENY"/>  
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] [%t] - [%X{sid}] %c{1.} - %m%n"/>  
            <Policies>  
                <TimeBasedTriggeringPolicy/>  
                <SizeBasedTriggeringPolicy size="100 MB"/>  
            </Policies>  
        </RollingFile>  

        <File name="UserService" fileName="${logPath}/user-service.log">  
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />    
        </File>  

    </appenders>  

    <loggers>  
        <root level="INFO">  
            <appender-ref ref="Console"/>  
            <appender-ref ref="RollingFileInfo"/>  
            <appender-ref ref="RollingFileWarn"/>  
            <appender-ref ref="RollingFileError"/>  
            <appender-ref ref="RollingFileDebug"/>  
            <appender-ref ref="RollingFileTrace"/>  
        </root>  

        <logger name="com.itlong.whatsmars.spring.boot.UserService" level="info" additivity="false">  
            <appender-ref ref="UserService"/>  
        </logger>  

        <!-- mybatis loggers -->  
        <logger name="com.ibatis" level="INFO"/>  
        <logger name="org.apache.ibatis" level="INFO"/>  
        <logger name="org.mybatis.spring" level="INFO"/>  
        <logger name="com.ibatis.common.jdbc.SimpleDataSource" level="INFO"/>  
        <logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG"/>  
        <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="DEBUG"/>  
        <!-- sql loggers -->  
        <logger name="java.sql.Connection" level="DEBUG" additivity="true"/>  
        <logger name="java.sql.Statement" level="DEBUG" additivity="true"/>  
        <logger name="java.sql.PreparedStatement" level="DEBUG" additivity="true"/>  
        <logger name="java.sql.ResultSet" level="DEBUG" additivity="true"/>  
        <!-- spring loggers -->  
        <logger name="org.springframework" level="WARN"/>  
        <logger name="org.springframework.web" level="WARN"/>  
        <logger name="springfox.documentation" level="WARN"/>  
        <logger name="org.hibernate" level="ERROR"/>  
        <logger name="springfox.documentation" level="ERROR"/>  
    </loggers>  

</configuration>  

三种启动方式:

  1. Application.main()

  2. mvn spring-boot:run

  3. java -jar whatsmars-spring-boot.jar

相关文章
|
人工智能 JSON 前端开发
【Spring boot实战】Springboot+对话ai模型整体框架+高并发线程机制处理优化+提示词工程效果展示(按照框架自己修改可对接市面上百分之99的模型)
【Spring boot实战】Springboot+对话ai模型整体框架+高并发线程机制处理优化+提示词工程效果展示(按照框架自己修改可对接市面上百分之99的模型)
|
Java 微服务
【SpringBoot】SpringBoot工程 自定义配置文件
【SpringBoot】SpringBoot工程 自定义配置文件
377 0
|
前端开发 Java Nacos
🛡️Spring Boot 3 整合 Spring Cloud Gateway 工程实践
本文介绍了如何使用Spring Cloud Alibaba 2023.0.0.0技术栈构建微服务网关,以应对微服务架构中流量治理与安全管控的复杂性。通过一个包含鉴权服务、文件服务和主服务的项目,详细讲解了网关的整合与功能开发。首先,通过统一路由配置,将所有请求集中到网关进行管理;其次,实现了限流防刷功能,防止恶意刷接口;最后,添加了登录鉴权机制,确保用户身份验证。整个过程结合Nacos注册中心,确保服务注册与配置管理的高效性。通过这些实践,帮助开发者更好地理解和应用微服务网关。
2215 0
🛡️Spring Boot 3 整合 Spring Cloud Gateway 工程实践
|
Java 应用服务中间件
SpringBoot工程打包部署
SpringBoot工程打包部署简介:SpringBoot项目可通过三种方式运行:可执行Jar包、可执行War包和标准War包。其中,可执行Jar/War包可独立运行,标准War包需部署在Tomcat中。具体步骤包括:1. 修改pom.xml添加构建依赖;2. 执行`mvn clean package`命令打包;3. 运行生成的Jar/War包(如`java -jar xxx.jar`)。对于标准War包,还需修改启动类并配置Tomcat依赖。
1171 7
|
前端开发 Java Linux
性能工具之 Jmeter 通过 SpringBoot 工程启动
【5月更文挑战第22天】性能工具之 Jmeter 通过 SpringBoot 工程启动
510 8
性能工具之 Jmeter 通过 SpringBoot 工程启动
|
Java 数据库连接 Maven
文本,使用SpringBoot工程创建一个Mybatis-plus项目,Mybatis-plus在编写数据层接口,用extends BaseMapper<User>继承实体类
文本,使用SpringBoot工程创建一个Mybatis-plus项目,Mybatis-plus在编写数据层接口,用extends BaseMapper<User>继承实体类
|
Java Maven Spring
创建Springboot工程的过程详细步骤
【6月更文挑战第17天】 创建Springboot工程涉及以下步骤: 1. 安装JDK和Maven并配置环境变量。 2. 在IDEA中新建项目,选择`Create from archetype`,选取`spring-boot-starter-parent`。 3. 输入项目名、包名和模块名,完成设置。 4. 生成的项目包含Springboot主类`Application`。 5. 添加所需功能,如控制器、服务和数据访问对象,使用Spring注解。 6. 运行`Application`启动项目。要深入学习,参考官方文档或在线教程。 ```
349 3
|
Java 测试技术 数据库
SpringBoot单元测试快速写法问题之不想在PandoraBoot工程中Mock Dao层如何解决
SpringBoot单元测试快速写法问题之不想在PandoraBoot工程中Mock Dao层如何解决
|
JavaScript Java 测试技术
基于springboot+vue.js的基于工程教育认证的计算机课程管理平台附带文章和源代码设计说明文档ppt
基于springboot+vue.js的基于工程教育认证的计算机课程管理平台附带文章和源代码设计说明文档ppt
170 6
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的冀中工程技师校园网站的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的冀中工程技师校园网站的详细设计和实现(源码+lw+部署文档+讲解等)
102 4