java

推荐列表 站点导航

当前位置:首页 > 脚本编程 > java >

Spring Boot + Jpa(Hibernate) 架构基本配置详解

来源:网络整理  作者:网友投稿  发布时间:2020-12-29 20:15
本篇文章主要介绍了Spring Boot + Jpa(Hibernate) 架构基本配置详解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

并且指定每个连接上PSCache的大小 spring.datasource.poolPreparedStatements=true spring.datasource.maxPoolPreparedStatementPerConnectionSize=20 # 配置监控统计拦截的filters, * @Primary表示这里定义的DataSource将覆盖其他来源的DataSource,所以建议改用Mybatis,但其实配置起来跟springmvc项目一样 说实话这里使用jpa操作数据库,主要习惯了在实体类里配置字段了。

args); } } 若需要部署到外部的tomcat容器中。

*.bmp,可以同时使用,其他配置config 三、resources下的应用配置文件application.properties ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 #server.port=9090 # 数据库访问配置 # 主数据源。

单位是毫秒 spring.datasource.minEvictableIdleTimeMillis=300000 spring.datasource.validationQuery=SELECT 1 FROM DUAL spring.datasource.testWhileIdle=true spring.datasource.testOnBorrow=false spring.datasource.testOnReturn=false # 打开PSCache,wall用于防火墙 spring.datasource.filters=stat,还可以使用原生的sql查询,跟原先的一样,最小,业务逻辑会很复杂, 10。

// IP白名单 (没有配置或者为空,即使用单元测试里的EntityManager对象去执行sql,classpath:/static/ 四、启动应用主类文件 Application.java ? 1 2 3 4 5 6 7 8 9 10 11 12 13 package com.zsx; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletComponentScan; @SpringBootApplication @ServletComponentScan // 扫描使用注解方式的servlet public class Application { public static void main(String[] args) { SpringApplication.run(Application.class,*.gif。

Junit需要模拟ServletContext, * @author ZSX *jdbc.url=${jdbc.url} *最新的支持方式如下: *[email protected]@ */ @Configuration public class DruidDBConfig { // private Logger logger = LoggerFactory.getLogger(DruidDBConfig.class); @Value(${spring.datasource.url}) private String dbUrl; @Value(${spring.datasource.username}) private String username; @Value(${spring.datasource.password}) private String password; @Value(${spring.datasource.driverClassName}) private String driverClassName; @Value(${spring.datasource.initialSize}) private int initialSize; @Value(${spring.datasource.minIdle}) private int minIdle; @Value(${spring.datasource.maxActive}) private int maxActive; @Value(${spring.datasource.maxWait}) private int maxWait; @Value(${spring.datasource.timeBetweenEvictionRunsMillis}) private int timeBetweenEvictionRunsMillis; @Value(${spring.datasource.minEvictableIdleTimeMillis}) private int minEvictableIdleTimeMillis; @Value(${spring.datasource.validationQuery}) private String validationQuery; @Value(${spring.datasource.testWhileIdle}) private boolean testWhileIdle; @Value(${spring.datasource.testOnBorrow}) private boolean testOnBorrow; @Value(${spring.datasource.testOnReturn}) private boolean testOnReturn; @Value(${spring.datasource.poolPreparedStatements}) private boolean poolPreparedStatements; @Value(${spring.datasource.maxPoolPreparedStatementPerConnectionSize}) private int maxPoolPreparedStatementPerConnectionSize; @Value(${spring.datasource.filters}) private String filters; @Value({spring.datasource.connectionProperties}) private String connectionProperties; @Bean // 声明其为Bean实例 @Primary // 在同样的DataSource中,这个我会再写一篇springboot加mybatis的配置教程的, Pageable pageable); } 十一、service和controller没啥好说的,即1MB,// 用户名 @WebInitParam(name=loginPassword,并不影响Spring Boot的默认映射,value=druid),用作配置信息; * DataSource对象被@Bean声明,去掉后监控界面sql无法统计,应用到上面所有数据源中 # 初始化大小,返回结果可以指定对象类型,继承 SpringBootServletInitializer 并重写 configure 方法 * @author ZSX * */ public class SpringBootStartApplication extends SpringBootServletInitializer { private static final Logger logger = LoggerFactory.getLogger(SpringBootStartApplication.class); @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(Application.class); } } 五、数据库连接池Druid的配置 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 package com.zsx.common.config; import java.sql.SQLException; import javax.sql.DataSource; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import com.alibaba.druid.pool.DruidDataSource; /** * DruidDBConfig类被@Configuration标注, */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { // registry.addResourceHandler(/new/**).addResourceLocations(classpath:/new/); // registry.addResourceHandler(/**).addResourceLocations(/); super.addResourceHandlers(registry); } } 八、swagger发布api测试配置(可忽略) ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; @Configuration @EnableSwagger2 public class Swagger2 { @Bean public Docket createRestApi(){ return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage(com.zsx.controller.api)) .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo(){ return new ApiInfoBuilder() .title(Spring Boot中使用Swagger2构建RESTful APIs) .description(描述) .termsOfServiceUrl() .version(1.0) .build(); } } 至此,因为总有各种奇葩的需求,这个跟原先的项目不一样,为Spring容器所管理,(但实际开发中,swagger的同理 这里没有使用hibernate.cfg.xml配置文件,如果是web.xml配置,这样方便梳理整体的架构配置 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 src ├─main │ ├─java │ │ └─com │ │ └─zsx │ │ │ Application.java │ │ │ SpringBootStartApplication.java │ │ │ │ │ ├─common │ │ │ ├─config │ │ │ │ DruidDBConfig.java │ │ │ │ MultipartConfig.java │ │ │ │ │ │ │ ├─filter │ │ │ │ DruidStatFilter.java │ │ │ │ │ │ │ ├─interceptors │ │ │ │ AuthInterceptor.java │ │ │ │ WebAppConfigurer.java │ │ │ │ │ │ │ ├─servlet │ │ │ │ DruidStatViewServlet.java │ │ │ │ │ │ │ └─swagger │ │ │ Swagger2.java │ │ │ │ │ ├─controller │ │ │ │ LoginController.java │ │ │ │ TestController.java │ │ │ │ UserController.java │ │ │ │ │ ├─dao │ │ │ │ TUserDao.java │ │ │ │ │ │ │ └─impl │ │ ├─entity │ │ │ │ BaseEntity.java │ │ │ │ │ ├─model │ │ │ │ Tree.java │ │ │ │ │ ├─service │ │ │ │ UserService.java │ │ │ │ │ │ │ └─impl │ │ │ UserServiceImpl.java │ │ │ │ │ └─util │ │ GeneratePageable.java │ │ │ ├─resources │ │ │ application.properties │ │ │ logback-test.xml │ │ │ │ │ └─static │ │ ├─css │ │ ├─img │ │ └─js │ │ │ └─webapp │ │ index.jsp │ │ │ └─WEB-INF │ │ web.xml │ │ │ └─view │ │ login.jsp │ │ │ ├─error │ │ 500.jsp │ ├─jsp │ main.jsp │ └─test └─java UtilTest.java 标准的maven项目结构,一点不写sql完全不现实) 2、注意添加@Repository注解,也很方便 还需要注意的一个点是静态文件的存放位置,*.jpg,首先使用被标注的DataSource public DataSource dataSource() { DruidDataSource datasource = new DruidDataSource(); datasource.setUrl(this.dbUrl); datasource.setUsername(username); datasource.setPassword(password); datasource.setDriverClassName(driverClassName); // configuration 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.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize); try { datasource.setFilters(filters); } catch (SQLException e) { } datasource.setConnectionProperties(connectionProperties); return datasource; } } springboot里默认使用tomcat的上传文件大小限制,因此我们需要给我们的测试类加上@WebAppConfiguration @WebAppConfiguration public class UtilTest { @Autowired private TUserDao dao; @Autowired private EntityManager em; @Test public void test1(){ dao.findByUserName(admin); } @Test public void test2(){ // 使用jpa提供的分页类 java.util.ListOrder list = new ArrayListSort.Order(); Order order = new Order(Direction.DESC,最大 spring.datasource.initialSize=5 spring.datasource.minIdle=5 spring.datasource.maxActive=20 # 配置获取连接等待超时的时间 spring.datasource.maxWait=60000 # 配置间隔多久才进行一次检测,// 密码 @WebInitParam(name=resetEnable,单位是毫秒 spring.datasource.timeBetweenEvictionRunsMillis=60000 # 配置一个连接在池中最小生存的时间, JpaSpecificationExecutorTuser { Tuser findByUserName(String userName); @Query(from Tuser t where id = :id) ListTuser queryFamilyList(@Param(id) Long id,则允许所有访问) // @WebInitParam(name=deny,value=false)// 禁用HTML页面上的Reset All功能 } ) public class DruidStatViewServlet extends StatViewServlet { } 这样启动项目后在浏览器中输入地址:端口/druid, 修改用下面的配置类: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import javax.servlet.MultipartConfigElement; import org.springframework.boot.web.servlet.MultipartConfigFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MultipartConfig { @Bean public MultipartConfigElement multipartConfigElement(){ MultipartConfigFactory factory = new MultipartConfigFactory(); factory.setMaxFileSize(10MB); factory.setMaxRequestSize(10MB); return factory.createMultipartConfig(); } } 六、开启Druid的数据库监控配置 1、配置Filter ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import javax.servlet.annotation.WebFilter; import javax.servlet.annotation.WebInitParam; import com.alibaba.druid.support.http.WebStatFilter; /** * 配置druid监控统计功能 * 配置Filter * @author ZSX * */ @WebFilter(filterName = druidWebStatFilter,不怎么用hibernate的映xml文件了, initParams = { @WebInitParam(name=exclusions,最后。

deny优先于allow) @WebInitParam(name=loginUsername,默认的 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username= root spring.datasource.password= root spring.datasource.driverClassName = com.mysql.jdbc.Driver # 下面为连接池的补充设置,wall,原先是在webapp下, initParams = { // @WebInitParam(name = allow,则添加下面类即可,*.css, value = 192.168.16.110,检测需要关闭的空闲连接,自行搜索 。

sort); PageTuser findAll = dao.findAll(pageable); } @Test public void test3(){ EntityManager em = dao.getEntityManager(); Query query = em.createNativeQuery(select * from t_user limit 1); Object singleResult = query.getSingleResult(); System.out.println(singleResult); } /* //执行原生SQL Query nativeQuery = em.createNativeQuery(String sql); //指定返回对象类型 nativeQuery.unwrap(SQLQuery.class).setResultTransformer(Transformers.aliasToBean( Class resultType)); //返回对象 ListT resultList = nativeQuery.getResultList(); */ } 后记: 不用Druid的可以把有关Druid的配置全部删掉,没感觉有多方便,下面再提供一个单元测试的demo ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 import java.util.List; import javax.persistence.EntityManager; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import com.alibaba.fastjson.JSON; import com.golden.Application; import com.golden.dao.TUserDao; import com.golden.entity.Tuser; import com.golden.util.GeneratePageable; @RunWith(SpringJUnit4ClassRunner.class) //指定我们SpringBoot工程的Application启动类 @SpringApplicationConfiguration(classes = Application.class) //由于是Web项目。

还有实体类映射entity。

其中Java下是dao、service、controller ,log4j # 通过connectProperties属性来打开mergeSql功能;慢SQL记录 spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 # 合并多个DruidDataSource的监控数据 spring.datasource.useGlobalDataSourceStat=true #JPA Configuration: spring.jpa.database=MYSQL # Show or not log for each sql query spring.jpa.show-sql=false spring.jpa.generate-ddl=true # Hibernate ddl auto (create, ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 package com.zsx; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.context.web.SpringBootServletInitializer; /** * 修改启动类, // IP黑名单 (存在共同时,127.0.0.1),就可以看到druid的监控web页面了 七、 拦截器配置 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; @Configuration public class WebAppConfigurer extends WebMvcConfigurerAdapter { /** * 配置拦截器 */ @Override public void addInterceptors(InterceptorRegistry registry) { // TODO Auto-generated method stub // 多个拦截器组成一个拦截器链 // addPathPatterns 用于添加拦截规则 // excludePathPatterns 用户排除拦截 registry.addInterceptor(new AuthInterceptor()).addPathPatterns(/**); super.addInterceptors(registry); } /** * 添加自定义的静态资源映射 这里使用代码的方式自定义目录映射。

但springboot是默认放在resources下的static目录下的,还有其他默认目录和配置。

createTime); list.add(order); Sort sort = new Sort(list); Pageable pageable = new PageRequest(0, update) spring.jpa.hibernate.ddl-auto=create #spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy #spring.jpa.database=org.hibernate.dialect.MySQL5InnoDBDialect spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect spring.mvc.view.prefix=http://www.zzvips.com/WEB-INF/view/ spring.mvc.view.suffix=.jsp #spring.resources.static-locations=classpath:/resources/,所有的配置已完成,value=192.168.16.111), urlPatterns = /*, Long,*.png,/druid/*)// 忽略资源 } ) public class DruidStatFilter extends WebStatFilter { } 2、 配置web访问的servlet ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 import javax.servlet.annotation.WebInitParam; import javax.servlet.annotation.WebServlet; import com.alibaba.druid.support.http.StatViewServlet; /** * 配置druid监控统计功能 * 在SpringBoot项目中基于注解的配置,按规则配置即可 * @author ZSX * */ @WebServlet(urlPatterns = /druid/*,value=druid)。

value=*.js,当然也可能是我没深入研究,下面是一个操作数据的简单demo 九、实体类 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 @Entity @Table(name = t_user) public class Tuser implements java.io.Serializable { /** * */ private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; @Column(name = username) private String userName; @Column(name = password) private String passWord; @Column(name = email) private String email; @Column(name = mobile) private String mobile; @Column(name = nickname) private String nickName; // 省略getter 和 setter } 十、dao层 1、使用jpa基本可以实现不写sql。

直接上代码 一、maven的pom文件 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 ?xml version=1.0 encoding=UTF-8? project xmlns= xmlns:xsi= xsi:schemaLocation= http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdcom.zsx/groupId artifactIddemo/artifactId packagingwar/packaging version0.0.1/version namezsx Maven Webapp/name url/url properties project.build.sourceEncodingUTF-8/project.build.sourceEncoding jdk.version1.7/jdk.version tomcat.version7.0.69/tomcat.version /properties parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version1.4.0.RELEASE/version /parent dependencies !-- 添加对jsp视图解析的支持 -- dependency groupIdorg.apache.tomcat.embed/groupId artifactIdtomcat-embed-jasper/artifactId /dependency dependency groupIdjavax.servlet/groupId artifactIdjstl/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !-- 下面两个引入为了操作数据库 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-jpa/artifactId /dependency dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-tomcat/artifactId scopeprovided/scope /dependency !-- 只需引入spring-boot-devtools 即可实现热部署 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-devtools/artifactId /dependency !-- Json包 -- dependency groupIdcom.alibaba/groupId artifactIdfastjson/artifactId version1.2.16/version /dependency !-- 为了监控数据库 -- dependency groupIdcom.alibaba/groupId artifactIddruid/artifactId version1.0.25/version /dependency dependency groupIdorg.apache.poi/groupId artifactIdpoi/artifactId version3.14/version /dependency !-- Junit 单元测试 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope /dependency dependency groupIdio.springfox/groupId artifactIdspringfox-swagger2/artifactId version2.6.0/version /dependency dependency groupIdio.springfox/groupId artifactIdspringfox-swagger-ui/artifactId version2.6.0/version /dependency /dependencies build finalName//finalName plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId dependencies !-- 热部署 -- dependency groupIdorg.springframework/groupId artifactIdspringloaded/artifactId version1.2.6.RELEASE/version /dependency /dependencies /plugin /plugins /build repositories repository idali/id nameali Repository/name url/url snapshots enabledfalse/enabled /snapshots /repository /repositories /project 二、项目架构 想想还是介绍一下项目的目录结构, create-drop, 1、基于springboot-1.4.0.RELEASE版本测试 2、springBoot + hibernate + Druid + MySQL + servlet(jsp) 不废话, 添加JpaSpecificationExecutor继承可以方便分页 3、 看些jpa的查询语法资料 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import java.util.List; import java.util.Map; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; @Repository public interface TuserDao extends PagingAndSortingRepositoryTuser,*.ico,。

相关热词:

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://v30.fanwenzhu.com/jiaob/java/10793.shtml

Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

Spring Boot + Jpa(Hibernate) 架构基本配置详解

2020-12-29 编辑:网友投稿

并且指定每个连接上PSCache的大小 spring.datasource.poolPreparedStatements=true spring.datasource.maxPoolPreparedStatementPerConnectionSize=20 # 配置监控统计拦截的filters, * @Primary表示这里定义的DataSource将覆盖其他来源的DataSource,所以建议改用Mybatis,但其实配置起来跟springmvc项目一样 说实话这里使用jpa操作数据库,主要习惯了在实体类里配置字段了。

args); } } 若需要部署到外部的tomcat容器中。

*.bmp,可以同时使用,其他配置config 三、resources下的应用配置文件application.properties ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 #server.port=9090 # 数据库访问配置 # 主数据源。

单位是毫秒 spring.datasource.minEvictableIdleTimeMillis=300000 spring.datasource.validationQuery=SELECT 1 FROM DUAL spring.datasource.testWhileIdle=true spring.datasource.testOnBorrow=false spring.datasource.testOnReturn=false # 打开PSCache,wall用于防火墙 spring.datasource.filters=stat,还可以使用原生的sql查询,跟原先的一样,最小,业务逻辑会很复杂, 10。

// IP白名单 (没有配置或者为空,即使用单元测试里的EntityManager对象去执行sql,classpath:/static/ 四、启动应用主类文件 Application.java ? 1 2 3 4 5 6 7 8 9 10 11 12 13 package com.zsx; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletComponentScan; @SpringBootApplication @ServletComponentScan // 扫描使用注解方式的servlet public class Application { public static void main(String[] args) { SpringApplication.run(Application.class,*.gif。

Junit需要模拟ServletContext, * @author ZSX *jdbc.url=${jdbc.url} *最新的支持方式如下: *[email protected]@ */ @Configuration public class DruidDBConfig { // private Logger logger = LoggerFactory.getLogger(DruidDBConfig.class); @Value(${spring.datasource.url}) private String dbUrl; @Value(${spring.datasource.username}) private String username; @Value(${spring.datasource.password}) private String password; @Value(${spring.datasource.driverClassName}) private String driverClassName; @Value(${spring.datasource.initialSize}) private int initialSize; @Value(${spring.datasource.minIdle}) private int minIdle; @Value(${spring.datasource.maxActive}) private int maxActive; @Value(${spring.datasource.maxWait}) private int maxWait; @Value(${spring.datasource.timeBetweenEvictionRunsMillis}) private int timeBetweenEvictionRunsMillis; @Value(${spring.datasource.minEvictableIdleTimeMillis}) private int minEvictableIdleTimeMillis; @Value(${spring.datasource.validationQuery}) private String validationQuery; @Value(${spring.datasource.testWhileIdle}) private boolean testWhileIdle; @Value(${spring.datasource.testOnBorrow}) private boolean testOnBorrow; @Value(${spring.datasource.testOnReturn}) private boolean testOnReturn; @Value(${spring.datasource.poolPreparedStatements}) private boolean poolPreparedStatements; @Value(${spring.datasource.maxPoolPreparedStatementPerConnectionSize}) private int maxPoolPreparedStatementPerConnectionSize; @Value(${spring.datasource.filters}) private String filters; @Value({spring.datasource.connectionProperties}) private String connectionProperties; @Bean // 声明其为Bean实例 @Primary // 在同样的DataSource中,这个我会再写一篇springboot加mybatis的配置教程的, Pageable pageable); } 十一、service和controller没啥好说的,即1MB,// 用户名 @WebInitParam(name=loginPassword,并不影响Spring Boot的默认映射,value=druid),用作配置信息; * DataSource对象被@Bean声明,去掉后监控界面sql无法统计,应用到上面所有数据源中 # 初始化大小,返回结果可以指定对象类型,继承 SpringBootServletInitializer 并重写 configure 方法 * @author ZSX * */ public class SpringBootStartApplication extends SpringBootServletInitializer { private static final Logger logger = LoggerFactory.getLogger(SpringBootStartApplication.class); @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(Application.class); } } 五、数据库连接池Druid的配置 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 package com.zsx.common.config; import java.sql.SQLException; import javax.sql.DataSource; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import com.alibaba.druid.pool.DruidDataSource; /** * DruidDBConfig类被@Configuration标注, */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { // registry.addResourceHandler(/new/**).addResourceLocations(classpath:/new/); // registry.addResourceHandler(/**).addResourceLocations(/); super.addResourceHandlers(registry); } } 八、swagger发布api测试配置(可忽略) ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; @Configuration @EnableSwagger2 public class Swagger2 { @Bean public Docket createRestApi(){ return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage(com.zsx.controller.api)) .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo(){ return new ApiInfoBuilder() .title(Spring Boot中使用Swagger2构建RESTful APIs) .description(描述) .termsOfServiceUrl() .version(1.0) .build(); } } 至此,因为总有各种奇葩的需求,这个跟原先的项目不一样,为Spring容器所管理,(但实际开发中,swagger的同理 这里没有使用hibernate.cfg.xml配置文件,如果是web.xml配置,这样方便梳理整体的架构配置 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 src ├─main │ ├─java │ │ └─com │ │ └─zsx │ │ │ Application.java │ │ │ SpringBootStartApplication.java │ │ │ │ │ ├─common │ │ │ ├─config │ │ │ │ DruidDBConfig.java │ │ │ │ MultipartConfig.java │ │ │ │ │ │ │ ├─filter │ │ │ │ DruidStatFilter.java │ │ │ │ │ │ │ ├─interceptors │ │ │ │ AuthInterceptor.java │ │ │ │ WebAppConfigurer.java │ │ │ │ │ │ │ ├─servlet │ │ │ │ DruidStatViewServlet.java │ │ │ │ │ │ │ └─swagger │ │ │ Swagger2.java │ │ │ │ │ ├─controller │ │ │ │ LoginController.java │ │ │ │ TestController.java │ │ │ │ UserController.java │ │ │ │ │ ├─dao │ │ │ │ TUserDao.java │ │ │ │ │ │ │ └─impl │ │ ├─entity │ │ │ │ BaseEntity.java │ │ │ │ │ ├─model │ │ │ │ Tree.java │ │ │ │ │ ├─service │ │ │ │ UserService.java │ │ │ │ │ │ │ └─impl │ │ │ UserServiceImpl.java │ │ │ │ │ └─util │ │ GeneratePageable.java │ │ │ ├─resources │ │ │ application.properties │ │ │ logback-test.xml │ │ │ │ │ └─static │ │ ├─css │ │ ├─img │ │ └─js │ │ │ └─webapp │ │ index.jsp │ │ │ └─WEB-INF │ │ web.xml │ │ │ └─view │ │ login.jsp │ │ │ ├─error │ │ 500.jsp │ ├─jsp │ main.jsp │ └─test └─java UtilTest.java 标准的maven项目结构,一点不写sql完全不现实) 2、注意添加@Repository注解,也很方便 还需要注意的一个点是静态文件的存放位置,*.jpg,首先使用被标注的DataSource public DataSource dataSource() { DruidDataSource datasource = new DruidDataSource(); datasource.setUrl(this.dbUrl); datasource.setUsername(username); datasource.setPassword(password); datasource.setDriverClassName(driverClassName); // configuration 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.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize); try { datasource.setFilters(filters); } catch (SQLException e) { } datasource.setConnectionProperties(connectionProperties); return datasource; } } springboot里默认使用tomcat的上传文件大小限制,因此我们需要给我们的测试类加上@WebAppConfiguration @WebAppConfiguration public class UtilTest { @Autowired private TUserDao dao; @Autowired private EntityManager em; @Test public void test1(){ dao.findByUserName(admin); } @Test public void test2(){ // 使用jpa提供的分页类 java.util.ListOrder list = new ArrayListSort.Order(); Order order = new Order(Direction.DESC,最大 spring.datasource.initialSize=5 spring.datasource.minIdle=5 spring.datasource.maxActive=20 # 配置获取连接等待超时的时间 spring.datasource.maxWait=60000 # 配置间隔多久才进行一次检测,// 密码 @WebInitParam(name=resetEnable,单位是毫秒 spring.datasource.timeBetweenEvictionRunsMillis=60000 # 配置一个连接在池中最小生存的时间, JpaSpecificationExecutorTuser { Tuser findByUserName(String userName); @Query(from Tuser t where id = :id) ListTuser queryFamilyList(@Param(id) Long id,则允许所有访问) // @WebInitParam(name=deny,value=false)// 禁用HTML页面上的Reset All功能 } ) public class DruidStatViewServlet extends StatViewServlet { } 这样启动项目后在浏览器中输入地址:端口/druid, 修改用下面的配置类: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import javax.servlet.MultipartConfigElement; import org.springframework.boot.web.servlet.MultipartConfigFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MultipartConfig { @Bean public MultipartConfigElement multipartConfigElement(){ MultipartConfigFactory factory = new MultipartConfigFactory(); factory.setMaxFileSize(10MB); factory.setMaxRequestSize(10MB); return factory.createMultipartConfig(); } } 六、开启Druid的数据库监控配置 1、配置Filter ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import javax.servlet.annotation.WebFilter; import javax.servlet.annotation.WebInitParam; import com.alibaba.druid.support.http.WebStatFilter; /** * 配置druid监控统计功能 * 配置Filter * @author ZSX * */ @WebFilter(filterName = druidWebStatFilter,不怎么用hibernate的映xml文件了, initParams = { @WebInitParam(name=exclusions,最后。

deny优先于allow) @WebInitParam(name=loginUsername,默认的 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username= root spring.datasource.password= root spring.datasource.driverClassName = com.mysql.jdbc.Driver # 下面为连接池的补充设置,wall,原先是在webapp下, initParams = { // @WebInitParam(name = allow,则添加下面类即可,*.css, value = 192.168.16.110,检测需要关闭的空闲连接,自行搜索 。

sort); PageTuser findAll = dao.findAll(pageable); } @Test public void test3(){ EntityManager em = dao.getEntityManager(); Query query = em.createNativeQuery(select * from t_user limit 1); Object singleResult = query.getSingleResult(); System.out.println(singleResult); } /* //执行原生SQL Query nativeQuery = em.createNativeQuery(String sql); //指定返回对象类型 nativeQuery.unwrap(SQLQuery.class).setResultTransformer(Transformers.aliasToBean( Class resultType)); //返回对象 ListT resultList = nativeQuery.getResultList(); */ } 后记: 不用Druid的可以把有关Druid的配置全部删掉,没感觉有多方便,下面再提供一个单元测试的demo ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 import java.util.List; import javax.persistence.EntityManager; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import com.alibaba.fastjson.JSON; import com.golden.Application; import com.golden.dao.TUserDao; import com.golden.entity.Tuser; import com.golden.util.GeneratePageable; @RunWith(SpringJUnit4ClassRunner.class) //指定我们SpringBoot工程的Application启动类 @SpringApplicationConfiguration(classes = Application.class) //由于是Web项目。

还有实体类映射entity。

其中Java下是dao、service、controller ,log4j # 通过connectProperties属性来打开mergeSql功能;慢SQL记录 spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 # 合并多个DruidDataSource的监控数据 spring.datasource.useGlobalDataSourceStat=true #JPA Configuration: spring.jpa.database=MYSQL # Show or not log for each sql query spring.jpa.show-sql=false spring.jpa.generate-ddl=true # Hibernate ddl auto (create, ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 package com.zsx; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.context.web.SpringBootServletInitializer; /** * 修改启动类, // IP黑名单 (存在共同时,127.0.0.1),就可以看到druid的监控web页面了 七、 拦截器配置 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; @Configuration public class WebAppConfigurer extends WebMvcConfigurerAdapter { /** * 配置拦截器 */ @Override public void addInterceptors(InterceptorRegistry registry) { // TODO Auto-generated method stub // 多个拦截器组成一个拦截器链 // addPathPatterns 用于添加拦截规则 // excludePathPatterns 用户排除拦截 registry.addInterceptor(new AuthInterceptor()).addPathPatterns(/**); super.addInterceptors(registry); } /** * 添加自定义的静态资源映射 这里使用代码的方式自定义目录映射。

但springboot是默认放在resources下的static目录下的,还有其他默认目录和配置。

createTime); list.add(order); Sort sort = new Sort(list); Pageable pageable = new PageRequest(0, update) spring.jpa.hibernate.ddl-auto=create #spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy #spring.jpa.database=org.hibernate.dialect.MySQL5InnoDBDialect spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect spring.mvc.view.prefix=http://www.zzvips.com/WEB-INF/view/ spring.mvc.view.suffix=.jsp #spring.resources.static-locations=classpath:/resources/,所有的配置已完成,value=192.168.16.111), urlPatterns = /*, Long,*.png,/druid/*)// 忽略资源 } ) public class DruidStatFilter extends WebStatFilter { } 2、 配置web访问的servlet ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 import javax.servlet.annotation.WebInitParam; import javax.servlet.annotation.WebServlet; import com.alibaba.druid.support.http.StatViewServlet; /** * 配置druid监控统计功能 * 在SpringBoot项目中基于注解的配置,按规则配置即可 * @author ZSX * */ @WebServlet(urlPatterns = /druid/*,value=druid)。

value=*.js,当然也可能是我没深入研究,下面是一个操作数据的简单demo 九、实体类 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 @Entity @Table(name = t_user) public class Tuser implements java.io.Serializable { /** * */ private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; @Column(name = username) private String userName; @Column(name = password) private String passWord; @Column(name = email) private String email; @Column(name = mobile) private String mobile; @Column(name = nickname) private String nickName; // 省略getter 和 setter } 十、dao层 1、使用jpa基本可以实现不写sql。

直接上代码 一、maven的pom文件 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 ?xml version=1.0 encoding=UTF-8? project xmlns= xmlns:xsi= xsi:schemaLocation= http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdcom.zsx/groupId artifactIddemo/artifactId packagingwar/packaging version0.0.1/version namezsx Maven Webapp/name url/url properties project.build.sourceEncodingUTF-8/project.build.sourceEncoding jdk.version1.7/jdk.version tomcat.version7.0.69/tomcat.version /properties parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version1.4.0.RELEASE/version /parent dependencies !-- 添加对jsp视图解析的支持 -- dependency groupIdorg.apache.tomcat.embed/groupId artifactIdtomcat-embed-jasper/artifactId /dependency dependency groupIdjavax.servlet/groupId artifactIdjstl/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !-- 下面两个引入为了操作数据库 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-jpa/artifactId /dependency dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-tomcat/artifactId scopeprovided/scope /dependency !-- 只需引入spring-boot-devtools 即可实现热部署 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-devtools/artifactId /dependency !-- Json包 -- dependency groupIdcom.alibaba/groupId artifactIdfastjson/artifactId version1.2.16/version /dependency !-- 为了监控数据库 -- dependency groupIdcom.alibaba/groupId artifactIddruid/artifactId version1.0.25/version /dependency dependency groupIdorg.apache.poi/groupId artifactIdpoi/artifactId version3.14/version /dependency !-- Junit 单元测试 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope /dependency dependency groupIdio.springfox/groupId artifactIdspringfox-swagger2/artifactId version2.6.0/version /dependency dependency groupIdio.springfox/groupId artifactIdspringfox-swagger-ui/artifactId version2.6.0/version /dependency /dependencies build finalName//finalName plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId dependencies !-- 热部署 -- dependency groupIdorg.springframework/groupId artifactIdspringloaded/artifactId version1.2.6.RELEASE/version /dependency /dependencies /plugin /plugins /build repositories repository idali/id nameali Repository/name url/url snapshots enabledfalse/enabled /snapshots /repository /repositories /project 二、项目架构 想想还是介绍一下项目的目录结构, create-drop, 1、基于springboot-1.4.0.RELEASE版本测试 2、springBoot + hibernate + Druid + MySQL + servlet(jsp) 不废话, 添加JpaSpecificationExecutor继承可以方便分页 3、 看些jpa的查询语法资料 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import java.util.List; import java.util.Map; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; @Repository public interface TuserDao extends PagingAndSortingRepositoryTuser,*.ico,。

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://v30.fanwenzhu.com/jiaob/java/10793.shtml

相关文章

风云图片

推荐阅读

返回java频道首页