项目组马上要使用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();
}
}

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();
} }

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);
}
}

非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());
} }

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

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>

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>

springboot 创建非web项目及数据源简单使用的更多相关文章

  1. SpringBoot(12) SpringBoot创建非web应用

    在Spring Boot中,要创建一个非Web应用程序,实现CommandLineRunner并覆盖run()方法 @SpringBootApplication public class Spring ...

  2. springboot+mybatis 非web项目构建

    https://blog.csdn.net/wlittlefive/article/details/86157134 https://blog.csdn.net/ththcc/article/deta ...

  3. springmvc 项目完整示例02 项目创建-eclipse创建动态web项目 配置文件 junit单元测试

    包结构 所需要的jar包直接拷贝到lib目录下 然后选定 build path 之后开始写项目代码 配置文件 ApplicationContext.xml <?xml version=" ...

  4. 【.net深呼吸】非 Web 项目使用缓存

    从.net 4 开始,非web项目也可以使用缓存技术,故曰:.net 4 乃框架成熟之标志也. 对于缓存嘛,耍过 ASP.NET 的伙伴们肯定知道,这么说吧,就是将一些使用频率较高的数据放于内存中,并 ...

  5. IntelliJ IDEA + Maven创建Java Web项目

    1. Maven简介 相对于传统的项目,Maven 下管理和构建的项目真的非常好用和简单,所以这里也强调下,尽量使用此类工具进行项目构建, 它可以管理项目的整个生命周期. 可以通过其命令做所有相关的工 ...

  6. IntelliJ IDEA14 和 Maven 系列:使用IntelliJ IDEA 14和Maven 7 创建java web项目(一)

    Intellij IDEA作为最好的Java IDE,创建Maven项目还是比较简单的,但是创建一个Maven Web项目还是要修改一些配置的,下面进行总结整理. 1前言 在创建项目中,IDEA提供了 ...

  7. 使用IntelliJ IDEA 和 Maven创建Java Web项目

    1. Maven简介 相对于传统的项目,Maven 下管理和构建的项目真的非常好用和简单,所以这里也强调下,尽量使用此类工具进行项目构建, 它可以管理项目的整个生命周期. 可以通过其命令做所有相关的工 ...

  8. 使用idea+springboot+Mybatis搭建web项目

    使用idea+springboot+Mybatis搭建web项目 springboot的优势之一就是快速搭建项目,省去了自己导入jar包和配置xml的时间,使用非常方便. 1.创建项目project, ...

  9. SpringBootWEB项目和非Web项目的全局异常捕获

    一.简介 SpringBoot的WEB异常捕获,如果是WEB项目的话,可以直接处理Controller中的异常.如果不是WEB项目的话,就需要使用AspectJ来做切面. 二.WEB项目 packag ...

随机推荐

  1. SpringBoot项目打war包部署Tomcat教程

    一.简介 正常来说SpringBoot项目就直接用jar包来启动,使用它内部的tomcat实现微服务,但有些时候可能有部署到外部tomcat的需求,本教程就讲解一下如何操作 二.修改pom.xml 将 ...

  2. Android和H5进行数据交互,Android获取H5Input框中的内容

    项目中嵌入了H5 页面,这个时候就需要拿到H5 input中的内容进行数据传递,先看实现的效果图

  3. 小程序实践(三):九宫格实现及item跳转

    效果图: 实现效果图红色线包含部分的九宫格效果,并附带item点击时间. --------------------------------------------------------------- ...

  4. 【爬虫】使用xpath与lxml移除特定标签

    移除标签的两种方式 可以用xpath定位 for bad in html.xpath(".//table"): bad.getparent().remove(bad) 参考:htt ...

  5. 排序算法----快速排序java

    快速排序是对冒泡排序的一种改进,平均时间复杂度是O(nlogn) import java.util.Arrays; import java.util.Scanner; public class tes ...

  6. 单纯linux系统下hadoop2.7.3 eclipse,记一次成功的运行wordcount的注意事项

    hadoop要正确安装好 hadoop eclipse plugin要对应相应的eclipse版本 define hadoop location mr master:9000 另一个9001  下面的 ...

  7. web前端(8)—— CSS选择器

    选择器 选择器,说白了就是html的标签或者其相关特性,在一个HTML页面中会有很多很多的元素,不同的元素可能会有不同的样式,某些元素又需要设置相同的样式,选择器就是用来从HTML页面中查找特定元素的 ...

  8. jenkins 备份配置信息

    本文介绍几种备份jenkin配置信息的方法,大家可根据实际情况做出选择. 我的测试环境如下: windows 7 jenkins 2.32.3 ____升级到___2.46.3 (长期支持版本) 多种 ...

  9. Jmeter 登入、新增、查询、修改、删除,动态传参。

    1.设置HTTP Request Defaults    请求默认值,这样之后每次请求同一个域名端口的时候后都不用输入协议.域名.端口号. 2.输入[登入]的接口号. 3.设置HTTP header  ...

  10. Spring事务管理2--声明式

    简述 1.Spring 的声明式事务管理在底层是建立在 AOP 的基础上.其本质是在方法前后进行拦截,然后在目标方法开始之前创建一个事务,在执行这目标方法结束后,根据执行情况提交或进行回滚事务. 2. ...