美文网首页
IDEA搭建简单的spring-boot项目

IDEA搭建简单的spring-boot项目

作者: 定金喜 | 来源:发表于2020-06-06 15:35 被阅读0次

    1.新建maven项目


    2.增加spring-boot依赖

    <?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>
    
        <groupId>com.renlijia.share</groupId>
        <artifactId>java.concurrent</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <properties>
            <spring.boot.version>2.0.3.RELEASE</spring.boot.version>
            <feign.version>9.5.1</feign.version>
            <druid.version>1.1.10</druid.version>
        </properties>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.3.RELEASE</version>
        </parent>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <version>${spring.boot.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-rest</artifactId>
                <version>${spring.boot.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>${spring.boot.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starte-tomcat</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-undertow</artifactId>
                <version>${spring.boot.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
                <version>${spring.boot.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-freemarker</artifactId>
                <version>${spring.boot.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <version>${spring.boot.version}</version>
                <optional>true</optional>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-configuration-processor</artifactId>
                <version>${spring.boot.version}</version>
                <optional>true</optional>
            </dependency>
    
            <!-- Feign start -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
                <version>2.0.1.RELEASE</version>
            </dependency>
    
            <dependency>
                <groupId>io.github.openfeign</groupId>
                <artifactId>feign-httpclient</artifactId>
                <version>${feign.version}</version>
            </dependency>
    
            <dependency>
                <groupId>com.renlijia</groupId>
                <artifactId>http-template</artifactId>
                <version>1.2.8</version>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.0</version>
            </dependency>
    
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.68</version>
            </dependency>
    
            <!-- 阿里依赖 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.0</version>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.41</version>
            </dependency>
    
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>25.1-jre</version>
            </dependency>
        </dependencies>
    
        <build>
            <resources>
                <resource>
                    <directory>${basedir}/src/main/java</directory>
                    <includes>
                        <include>**/*.properties</include>
                        <include>**/*.xml</include>
                        <include>**/*.html</include>
                    </includes>
                </resource>
                <resource>
                    <directory>${basedir}/src/main/resources</directory>
                    <includes>
                        <include>**/*.properties</include>
                        <include>**/*.xml</include>
                        <include>**/*.yml</include>
                        <include>**/*.ftl</include>
                        <include>**/*.ico</include>
                        <include>**/*.png</include>
                        <include>**/*.handlers</include>
                    </includes>
                </resource>
            </resources>
    
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <mainClass>com.renlijia.AppStart</mainClass>
                        <layout>ZIP</layout>
                        <finalName>test</finalName>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                            <configuration>
                                <classifier>exec</classifier>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </project>
    

    3.增加AppStart和配置文件

    package com.renlijia;
    
    import com.renlijia.config.AppWebConfig;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
    
    /**
     * @Author: ding
     * @Date: 2020-06-06 13:02
     */
    @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
    public class AppStart {
        public static void main(String[] args) {
    
            SpringApplication.run(AppWebConfig.class, args);
            System.setProperty("tomcat.util.http.parser.HttpParser.requestTargetAllow","|{}");
        }
    }
    
    package com.renlijia.config;
    
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.boot.web.servlet.ServletComponentScan;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.EnableAspectJAutoProxy;
    import org.springframework.web.servlet.config.annotation.EnableWebMvc;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    /**
     * @Author: ding
     * @Date: 2020-06-06 14:17
     */
    @ComponentScan(basePackages = {"com.renlijia"})
    @EnableWebMvc
    @Configuration
    @EnableAutoConfiguration
    @EnableAspectJAutoProxy(proxyTargetClass = true)
    @ServletComponentScan
    public class AppWebConfig implements WebMvcConfigurer {
    }
    

    4.增加druid配置和mybatis配置

    package com.renlijia.config;
    
    import com.alibaba.druid.filter.Filter;
    import com.alibaba.druid.pool.DruidDataSource;
    import com.alibaba.druid.wall.WallConfig;
    import com.alibaba.druid.wall.WallFilter;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.mybatis.spring.SqlSessionTemplate;
    import org.mybatis.spring.annotation.MapperScan;
    import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.DependsOn;
    import org.springframework.context.annotation.Primary;
    import org.springframework.core.io.ClassPathResource;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.core.io.support.ResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    import org.springframework.transaction.annotation.TransactionManagementConfigurer;
    import org.springframework.transaction.support.TransactionTemplate;
    
    import javax.annotation.Resource;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    /**
      * @author well
      * @date 2019-05-07
      */
    @Configuration
    @ConfigurationProperties(prefix = "spring.datasource")
    @EnableTransactionManagement
    @MapperScan(basePackages = {"com.renlijia.mybatis.dao"})
    public class DruidConfig implements TransactionManagementConfigurer {
    
        private Logger logger = LoggerFactory.getLogger(DruidConfig.class);
    
        private String url;
    
        private String username;
    
        private String password;
    
        private String driverClassName = "com.mysql.jdbc.Driver";
    
        private int initialSize = 5;
    
        private int minIdle = 5;
    
        private int maxActive = 200;
    
        private int maxWait = 30000;
    
        private int timeBetweenEvictionRunsMillis = 60000;
    
        private int minEvictableIdleTimeMillis = 300000;
    
        private String validationQuery = "SELECT 1 FROM DUAL";
    
        private boolean testWhileIdle = true;
    
        private boolean testOnBorrow = false;
    
        private boolean testOnReturn = false;
    
        private boolean poolPreparedStatements = true;
    
        private int maxPoolPreparedStatementPerConnectionSize = 20;
    
        private String filters = "stat,wall";
    
        private String connectionProperties = "druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000";
    
        @Resource
        private WallFilter wallFilter;
    
        @Bean(name = "sqlSessionFactory")
        @Primary
        public SqlSessionFactoryBean createSqlSessionFactoryBean(DataSourceTransactionManager transactionManager) throws Exception {
            SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
            sqlSessionFactoryBean.setDataSource(transactionManager.getDataSource());
            sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("sqlmap-config.xml"));
            ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
            sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath*:/mybatis/**/*.xml"));
            sqlSessionFactoryBean.setVfs(SpringBootVFS.class);
            sqlSessionFactoryBean.setTypeAliasesPackage("com.renlijia.mybatis.model");
            return sqlSessionFactoryBean;
        }
    
        @Bean
        @Primary
        public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    
        @Bean
        @Primary
        @Override
        public DataSourceTransactionManager annotationDrivenTransactionManager() {
            DruidDataSource dataSource = new DruidDataSource();
            dataSource.setUrl(url);
            dataSource.setUsername(username);
            dataSource.setPassword(password);
            dataSource.setDriverClassName(driverClassName);
            dataSource.setInitialSize(initialSize);
            dataSource.setMinIdle(minIdle);
            dataSource.setMaxActive(maxActive);
            dataSource.setMaxWait(maxWait);
            dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
            dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
            dataSource.setValidationQuery(validationQuery);
            dataSource.setTestWhileIdle(testWhileIdle);
            dataSource.setTestOnBorrow(testOnBorrow);
            dataSource.setTestOnReturn(testOnReturn);
            dataSource.setPoolPreparedStatements(poolPreparedStatements);
            dataSource.setConnectionProperties(connectionProperties);
            dataSource.setConnectionInitSqls(Arrays.asList("SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;"));
            dataSource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
    
            //配置数据库批量更新,需要WallConfig设置multiStatementAllow=true
            List<Filter> proxyFilters = new ArrayList<>();
            proxyFilters.add(wallFilter);
            dataSource.setProxyFilters(proxyFilters);
    
            try {
                dataSource.setFilters(filters);
            } catch (SQLException e) {
                logger.error("druid configuration initialization filter", e);
            }
            return new DataSourceTransactionManager(dataSource);
        }
    
        @Bean(name = "wallConfig")
        WallConfig wallFilterConfig() {
            WallConfig wc = new WallConfig();
            wc.setMultiStatementAllow(true);
            return wc;
        }
    
        @Bean(name = "wallFilter")
        @DependsOn("wallConfig")
        WallFilter wallFilter(WallConfig wallConfig) {
            WallFilter wfilter = new WallFilter();
            wfilter.setConfig(wallConfig);
            return wfilter;
        }
    
        @Bean
        public TransactionTemplate transactionTemplate(DataSourceTransactionManager transactionManager) {
            return new TransactionTemplate(transactionManager);
        }
    
        public void setUrl(String url) {
            this.url = url;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public void setDriverClassName(String driverClassName) {
            this.driverClassName = driverClassName;
        }
    
        public void setInitialSize(int initialSize) {
            this.initialSize = initialSize;
        }
    
        public void setMinIdle(int minIdle) {
            this.minIdle = minIdle;
        }
    
        public void setMaxActive(int maxActive) {
            this.maxActive = maxActive;
        }
    
        public void setMaxWait(int maxWait) {
            this.maxWait = maxWait;
        }
    
        public void setTimeBetweenEvictionRunsMillis(int timeBetweenEvictionRunsMillis) {
            this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
        }
    
        public void setMinEvictableIdleTimeMillis(int minEvictableIdleTimeMillis) {
            this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
        }
    
        public void setValidationQuery(String validationQuery) {
            this.validationQuery = validationQuery;
        }
    
        public void setTestWhileIdle(boolean testWhileIdle) {
            this.testWhileIdle = testWhileIdle;
        }
    
        public void setTestOnBorrow(boolean testOnBorrow) {
            this.testOnBorrow = testOnBorrow;
        }
    
        public void setTestOnReturn(boolean testOnReturn) {
            this.testOnReturn = testOnReturn;
        }
    
        public void setPoolPreparedStatements(boolean poolPreparedStatements) {
            this.poolPreparedStatements = poolPreparedStatements;
        }
    
        public void setMaxPoolPreparedStatementPerConnectionSize(int maxPoolPreparedStatementPerConnectionSize) {
            this.maxPoolPreparedStatementPerConnectionSize = maxPoolPreparedStatementPerConnectionSize;
        }
    
        public void setFilters(String filters) {
            this.filters = filters;
        }
    
        public void setConnectionProperties(String connectionProperties) {
            this.connectionProperties = connectionProperties;
        }
    }
    
    

    在resource下增加配置文件sqlmap-config.xml

    <?xml version="1.0" encoding="UTF-8"?>
    
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "META-INF/dtd/mybatis/mybatis-3-config.dtd">
    
    <configuration>
    
        <settings>
            <setting name="cacheEnabled" value="false" />
            <setting name="useGeneratedKeys" value="true" />
            <setting name="defaultExecutorType" value="REUSE" />
        </settings>
        <typeAliases>
            <package name="com.renlijia.mybatis.model"/>
        </typeAliases>
    </configuration>
    

    5.增加dao,do和mapper文件

    package com.renlijia.mybatis.dao;
    
    import com.renlijia.mybatis.model.PersonDO;
    
    /**
     * @Author: ding
     * @Date: 2020-06-06 13:37
     */
    public interface PersonDAO {
    
        long insert(PersonDO personDO);
    }
    
    package com.renlijia.mybatis.model;
    
    import lombok.Data;
    
    /**
     * @Author: ding
     * @Date: 2020-06-06 13:39
     */
    @Data
    public class PersonDO {
    
        private String name;
    
        private Integer age;
    }
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "META-INF/dtd/mybatis-3-mapper.dtd">
    
    <mapper namespace="com.renlijia.mybatis.dao.PersonDAO">
        <resultMap type="com.renlijia.mybatis.model.PersonDO" id="PersonDOMap">
            <result column="id" property="id"/>
            <result column="name" property="name"/>
            <result column="age" property="age"/>
        </resultMap>
    
        <sql id="Person_columns">
            id,name,age
        </sql>
    
        <insert id="insert" parameterType="PersonDO">
            INSERT  INTO person(name, age)
            values(#{name},#{age})
        </insert>
    
    </mapper>
    

    6.增加application.yml文件

    在resource下增加yml文件

    server:
      port: 7007
    
    logging:
      path: /home/appuser/salary/logs
    
    spring:
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        url: jdbc:mysql://127.0.0.1:3306/renlijia_share?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=true
        username: root
        password: 123456
    

    7.新建mysql数据库renlijia_share,并在数据库下增加person表

    CREATE TABLE `renlijia_share`.`person`  (
      `id` int(10) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
      `age` int(4) NULL DEFAULT NULL,
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
    

    8.增加controller文件

    package com.renlijia.concurrent;
    
    import com.google.common.util.concurrent.ThreadFactoryBuilder;
    import com.renlijia.mybatis.dao.PersonDAO;
    import com.renlijia.mybatis.model.PersonDO;
    import org.springframework.transaction.support.TransactionTemplate;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.annotation.Resource;
    import java.util.concurrent.LinkedBlockingDeque;
    import java.util.concurrent.ThreadFactory;
    import java.util.concurrent.ThreadPoolExecutor;
    import java.util.concurrent.TimeUnit;
    
    /**
     * @Author: ding
     * @Date: 2020-06-06 14:11
     */
    @RestController
    public class TestController {
    
        @Resource
        private PersonDAO personDAO;
    
    
        @RequestMapping("/concurrent/multithread")
        public String multiThreadTest(){
    
            PersonDO personDO = new PersonDO();
            personDO.setName("黄晓明");
            personDO.setAge(35);
            personDAO.insert(personDO);
            
            return null;
        }
    }
    

    当请求http://127.0.0.1:7007/concurrent/multithread后,会在数据库增加记录。

    相关文章

      网友评论

          本文标题:IDEA搭建简单的spring-boot项目

          本文链接:https://www.haomeiwen.com/subject/xawxtktx.html