springboot 創建非web項目及數據源簡單使用


項目組馬上要使用springboot來重構程序,首先要對幾個比較小的非web項目重構,所以新手入門,簡單做了個小例子

代碼結構如下:

dao層

package com.mysping.myboot001.dao.impl;

import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import com.mysping.myboot001.dao.UserDao;

@Repository
public class UserDaoImpl implements UserDao{

    @Resource
    private JdbcTemplate jdbcTemplate;
    
    @Override
    public List<Map<String, Object>> queryForList() throws Exception {
        String sql = "select * from springboot.sys_user";
        return this.jdbcTemplate.queryForList(sql);
    }

    @Override
    public DataSource getDataSource() {
        return this.jdbcTemplate.getDataSource();
    }
}
View Code

service層

package com.mysping.myboot001.service.impl;

import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import org.springframework.stereotype.Service;

import com.mysping.myboot001.dao.UserDao;
import com.mysping.myboot001.service.UserService;
import com.zaxxer.hikari.HikariDataSource;

@Service
public class UserServiceImpl implements UserService{

    @Resource
    private UserDao userDao;
    
    @Override
    public List<Map<String, Object>> queryForUserList() throws Exception {
        return userDao.queryForList();
    }

    @Override
    public HikariDataSource getHikariCpDataSource() {
        return (HikariDataSource) userDao.getDataSource();
    }
    
}
View Code

springboot啟動類

package com.mysping.myboot001;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Myboot001Application {

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

非web項目,要運行的代碼需要實現CommandLineRunner或者ApplicationRunner接口,可參考官方文檔:https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/htmlsingle/#boot-features-command-line-runner

對於分布在多個實體類中需要執行的代碼,可通過實現Ordered接口,或者使用Order注解來控制,參數值越小,執行優先級越高

package com.mysping.myboot001;

import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.sql.DataSource;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

import com.mysping.myboot001.service.UserService;
import com.zaxxer.hikari.HikariDataSource;

@Component
public class MainBusiEntry implements CommandLineRunner{

    private Logger logger = LogManager.getLogger(MainBusiEntry.class);
    
    @Resource
    private UserService userService;
    
    @Override
    public void run(String... args) throws Exception {
        List<Map<String, Object>> queryForUserList = userService.queryForUserList();
        logger.info("queryForUserList: {}", queryForUserList);

        HikariDataSource hikariCpDataSource = userService.getHikariCpDataSource();

        /*
         * idleTimeout改制在官方文檔中意為:空閑連接最大存活時間,這個參數只有在maximumPoolSize的值大於minimumIdle時才生效,
         * 允許輸入的最小值為10000ms(10秒),默認為600000(10分鍾)
         * 
         * 但在測試中,當配置600000,即10分鍾時,getIdleTimeout打印的值為0,當配置比299000大的數字時,getIdleTimeout打印的值為0,具體情況還需調查
         */
        logger.info("maxPoolSize: {},  maxLifeTime: {}, conTimeout: {}, autoCommit: {}, idleTimeout: {} ",
                hikariCpDataSource.getMaximumPoolSize(), hikariCpDataSource.getMaxLifetime(),
                hikariCpDataSource.getConnectionTimeout(), hikariCpDataSource.isAutoCommit(),
                hikariCpDataSource.getIdleTimeout());
    }

}
View Code

 applcaition.properties配置,本例中使用的數據源為默認的數據源HikariCP,參考文檔:https://github.com/brettwooldridge/HikariCP

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.103.51:3306/springboot?characterEncoding=UTF-8&useOldAliasMetadataBehavior=true&zeroDateTimeBehavior=convertToNull
spring.datasource.username=root
spring.datasource.password=12345

## 連接池允許的最大連接數,如果包括空閑連接和正在使用的連接,當連接池連接被用完用,其他線程在獲取連接時,在connectionTimeout時間之前,getConnection將一直處於阻塞狀態
spring.datasource.hikari.maximum-pool-size=20
## 空閑連接最大存活時間,這個參數只有在maximumPoolSize的值大於minimumIdle時才生效,允許輸入的最小值為10000ms(10秒),默認為600000(10分鍾)
spring.datasource.hikari.idle-timeout=600000
## 最小空閑連接池數量,HikariCP建議不要設置改值,將連接池的大小設置為固定大小,默認改值與maximumPoolSize大小一致
spring.datasource.hikari.minimum-idle=20
## 等待從連接池獲取連接的最大時間,單位微秒,最小值為250ms,默認值為30000(30秒)
spring.datasource.hikari.connection-timeout=10000
## 默認為true
spring.datasource.hikari.auto-commit=true
## 連接池中連接的最大生命周期,默認設置為1800000(30分鍾),其值也取決於idleTimeout
spring.datasource.hikari.max-lifetime=300000
## 該屬性用於設置如果連接池不能正確產生初始連接時,是否迅速返回錯誤信息,默認為1
spring.datasource.hikari.initialization-fail-timeout=1
## 驗證連接是否有效的最大時間,該值必須小於connectionTimeout,最小值為250ms,默認為5000(5秒)
spring.datasource.hikari.validation-timeout=5000
View Code

log4j2.xml

<!--  monitorInterval表示動態刷新配置的秒數,不用重啟  -->
<configuration debug="off" monitorInterval="1800">
        <Properties>
                <Property name="log-path">D:/Programs/eclipseworkplace/logs/myboot001</Property>
        </Properties>
        <Appenders>
                <Console name="Console" target="SYSTEM_OUT">
                        <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36}.%M()/%L - %msg%xEx%n"/>
                </Console>
                <RollingFile name="DailyRollingFile" fileName="${log-path}/cell.log" filePattern="${log-path}/cell-%d{yyyy-MM-dd}.log.gz">
                        <Policies>
                                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                        </Policies>
                        <DefaultRolloverStrategy>
                                <Delete basePath="${log-path}" maxDepth="2">
                                        <IfFileName glob="*.log.gz"/>
                                        <IfLastModified age="30d"/>
                                </Delete>
                        </DefaultRolloverStrategy>
                        <PatternLayout pattern="[%p] %t %d{HH:mm:ss,SSS} %c{1}:%L(%M) %m%n"/>
                </RollingFile>
        </Appenders>
        <Loggers>
                <root level="INFO">
                        <appender-ref ref="DailyRollingFile"/>
                </root>
        </Loggers>
</configuration>
View Code

pom.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>

    <groupId>com.mysping</groupId>
    <artifactId>myboot001</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>myboot001</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.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>
    </properties>

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

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM