NutzCN Logo
精华 Springboot里使用Nutz.dao与Druid
发布于 462天前 作者 Howe 1047 次浏览 复制 上一个帖子 下一个帖子
标签:

最近使用微服务(这年头啥东西都要微服务),作为Nutz组里唯一一个打酱油的,难道要跟一般人一样用Springboot+MyBatis?
这不是我风格呀,看了下Onekey的demo,发现居然要写application.yml,yml之类的东西最讨厌了。。
所以直接改写了下,基本上不需要啥配置的,springboot-nutz-starter是个好东西,直接Nutz.dao、Nutz.Json用起来,
废话少说下面贴代码。

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>cn.nutz</groupId>
	<artifactId>sb-nutz</artifactId>
	<version>1.0.0-SNAPSHOT</version>
	<packaging>jar</packaging>
	<name>cyxapiv2</name>
	<url>http://maven.aliyun.com</url>
	<description>project for Caiyouxi</description>

	<repositories>
		<repository>
			<id>nutz</id>
			<url>https://jfrog.nutz.cn/artifactory/jcenter</url>
		</repository>
		<repository>
			<id>nutz-snapshots</id>
			<url>https://jfrog.nutz.cn/artifactory/snapshots</url>
			<snapshots>
				<enabled>true</enabled>
				<updatePolicy>always</updatePolicy>
			</snapshots>
			<releases>
				<enabled>false</enabled>
			</releases>
		</repository>
	</repositories>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.6.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-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.nutz</groupId>
			<artifactId>nutz-plugins-spring-boot-starter</artifactId>
			<version>1.r.63-SNAPSHOT</version>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>

		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid-spring-boot-starter</artifactId>
			<version>1.1.2</version>
		</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>

application.properties

server.port=80
# 数据源配置
#https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
spring.datasource.druid.url=jdbc:mysql://120.24.240.16:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false
spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.druid.username=test
spring.datasource.druid.password=l6ZzXMs8PDVhexy4hSPBUMZ0rqGhxX5KJwOBptltZ5c5KlV6cgtUzAul0ERVjE2SnB7qUUq3g1+pa04MDlqJYQ==
# 配置 connection-properties,启用加密,配置公钥。
spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKjST2Dg5nbaoFaUOxjiCz2Qzu9tMkGMRg7e0g2cE0gbHJhnDJlinZX1CIqMSdw47VuqJaUxMECm9hephb9qee0CAwEAAQ==
# 启动ConfigFilter
spring.datasource.druid.filter.config.enabled=true

# 初始化大小,最小,最大
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-active=20
# 配置获取连接等待超时的时间
spring.datasource.druid.max-wait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.druid.time-between-eviction-runs-millis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.druid.min-evictable-idle-time-millis=300000
#检测连接是否有效的sql
spring.datasource.druid.validation-query=SELECT 'x'
spring.datasource.druid.validation-query-timeout=60000
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
# PSCache Mysql下建议关闭
spring.datasource.druid.pool-prepared-statements=false
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=-1
#spring.datasource.druid.max-open-prepared-statements= #等价于上面的max-pool-prepared-statement-per-connection-size

# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.druid.filters=stat,wall,log4j

# WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilter
#启动项目后访问 http://127.0.0.1:8080/druid
#是否启用StatFilter默认值true
spring.datasource.druid.web-stat-filter.enabled=true
spring.datasource.druid.web-stat-filter.url-pattern=/*
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*
#缺省sessionStatMaxCount是1000个
spring.datasource.druid.web-stat-filter.session-stat-max-count=1000
#关闭session统计功能
spring.datasource.druid.web-stat-filter.session-stat-enable=false
#配置principalSessionName,使得druid能够知道当前的session的用户是谁
#如果你session中保存的是非string类型的对象,需要重载toString方法
spring.datasource.druid.web-stat-filter.principalSessionName=xxx.user
#如果user信息保存在cookie中,你可以配置principalCookieName,使得druid知道当前的user是谁
spring.datasource.druid.web-stat-filter.principalCookieName=xxx.user
#druid 0.2.7版本开始支持profile,配置profileEnable能够监控单个url调用的sql列表。
spring.datasource.druid.web-stat-filter.profile-enable=false

# StatViewServlet配置,说明请参考Druid Wiki,配置_StatViewServlet配置
#是否启用StatViewServlet默认值true
spring.datasource.druid.stat-view-servlet.enabled=true
spring.datasource.druid.stat-view-servlet.urlPattern=/druid/*
#禁用HTML页面上的“Reset All”功能
spring.datasource.druid.stat-view-servlet.resetEnable=false
#用户名
spring.datasource.druid.stat-view-servlet.loginUsername=admin
#密码
spring.datasource.druid.stat-view-servlet.loginPassword=admin
#IP白名单(没有配置或者为空,则允许所有访问)
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1,192.168.163.1
#IP黑名单 (存在共同时,deny优先于allow)
spring.datasource.druid.stat-view-servlet.deny=192.168.1.73


#日志配置
logging.level.com.caiyouxi=debug
logging.level.org.springframework.web=debug
logging.level.org.springframework.transaction=debug
logging.level.org.mybatis=debug

debug=false

工程结构
TIM截图20170909174213.jpg

项目代码
[https://gitee.com/howe/springboot-nutz-api-demo]

8 回复

又一个精华帖

来自美丽的 NutzCN

相信Nutz完全也可以打造一个微服务的!

@zozoh






+++++ +++++++++ ++++++++++++++++++++ +++++++++++++++++++ +++++++++++++++I7+++++ +++++++++++++++~ =++= ++++++++++++++ ~7=.==== ++++++++++++++I~~ ~====== +++++++++++++ ~~~:======== ++++++++++++ ~~~~~~~====== ++++++++++: ~~~~~~~~:~===== +++++++ == ~=++~~~=:~====== ++++ ======~~ ~~?:~======= + ==========7~~:~======== ========7~I:~========= ====== ~:~========== ======~~========== =============== =========== ' ███╗ ██╗██╗ ██╗████████╗███████╗ ███████╗████████╗ █████╗ ██████╗ ████████╗███████╗██████╗ ' ████╗ ██║██║ ██║╚══██╔══╝╚══███╔╝ ██╔════╝╚══██╔══╝██╔══██╗██╔══██╗╚══██╔══╝██╔════╝██╔══██╗ ' ██╔██╗ ██║██║ ██║ ██║ ███╔╝█████╗███████╗ ██║ ███████║██████╔╝ ██║ █████╗ ██████╔╝ ' ██║╚██╗██║██║ ██║ ██║ ███╔╝ ╚════╝╚════██║ ██║ ██╔══██║██╔══██╗ ██║ ██╔══╝ ██╔══██╗ ' ██║ ╚████║╚██████╔╝ ██║ ███████╗ ███████║ ██║ ██║ ██║██║ ██║ ██║ ███████╗██║ ██║ ' ╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚══════╝ ╚══════╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚══════╝╚═╝ ╚═╝ ' powered by nutz.cn version 1.r.63 2017-11-14 14:17:11.348 INFO 6044 --- [ main] com.elvish.oda.OdaApplication : Starting OdaApplication on DESKTOP-ENB3GMH with PID 6044 (C:\Users\Elvish\git\oda\target\classes started by Elvish in C:\Users\Elvish\git\oda) 2017-11-14 14:17:11.355 INFO 6044 --- [ main] com.elvish.oda.OdaApplication : The following profiles are active: prod 2017-11-14 14:17:11.453 INFO 6044 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@12ed9db6: startup date [Tue Nov 14 14:17:11 CST 2017]; root of context hierarchy 2017-11-14 14:17:13.623 INFO 6044 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'com.elvish.oda.common.conf.shiro.ShiroManager' of type [com.elvish.oda.common.conf.shiro.ShiroManager] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2017-11-14 14:17:14.034 INFO 6044 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$8096de30] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2017-11-14 14:17:14.302 INFO 6044 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'shiroConfig' of type [com.elvish.oda.common.conf.ShiroConfig$$EnhancerBySpringCGLIB$$75e6b7ad] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2017-11-14 14:17:14.389 INFO 6044 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'shiroCacheManager' of type [org.apache.shiro.cache.MemoryConstrainedCacheManager] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2017-11-14 14:17:14.440 INFO 6044 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'securityManager' of type [org.apache.shiro.web.mgt.DefaultWebSecurityManager] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2017-11-14 14:17:14.585 INFO 6044 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'userService' of type [com.elvish.oda.busin.service.UserService] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2017-11-14 14:17:14.588 INFO 6044 --- [ main] org.apache.shiro.realm.AuthorizingRealm : No cache or cacheManager properties have been set. Authorization cache cannot be obtained. 2017-11-14 14:17:14.589 INFO 6044 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'myRealm' of type [com.elvish.oda.common.conf.shiro.MyRealm] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2017-11-14 14:17:14.643 INFO 6044 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'getAuthorizationAttributeSourceAdvisor' of type [org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 2017-11-14 14:17:15.660 INFO 6044 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8085 (http) 2017-11-14 14:17:15.693 INFO 6044 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2017-11-14 14:17:15.702 INFO 6044 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.23 2017-11-14 14:17:16.158 INFO 6044 --- [ost-startStop-1] org.apache.jasper.servlet.TldScanner : At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. 2017-11-14 14:17:16.172 INFO 6044 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2017-11-14 14:17:16.173 INFO 6044 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 4723 ms 2017-11-14 14:17:17.375 INFO 6044 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 2017-11-14 14:17:17.383 INFO 6044 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'statViewServlet' to [/druid/*] 2017-11-14 14:17:17.397 INFO 6044 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 2017-11-14 14:17:17.398 INFO 6044 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 2017-11-14 14:17:17.406 INFO 6044 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*] 2017-11-14 14:17:17.406 INFO 6044 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*] 2017-11-14 14:17:17.415 INFO 6044 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'webStatFilter' to urls: [/*] 2017-11-14 14:17:17.415 INFO 6044 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'shiroFilter' to: [/*] 2017-11-14 14:17:20.085 ERROR 6044 --- [ main] o.s.b.b.PropertiesConfigurationFactory : Properties configuration failed validation 2017-11-14 14:17:20.092 ERROR 6044 --- [ main] o.s.b.b.PropertiesConfigurationFactory : Field error in object 'spring.datasource.druid' on field 'driver': rejected value [com.mysql.jdbc.Driver]; codes [typeMismatch.spring.datasource.druid.driver,typeMismatch.driver,typeMismatch.java.sql.Driver,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [spring.datasource.druid.driver,driver]; arguments []; default message [driver]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.sql.Driver' for property 'driver'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'java.sql.Driver' for property 'driver': no matching editors or conversion strategy found] 2017-11-14 14:17:20.100 WARN 6044 --- [ main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource': Could not bind properties to DruidDataSourceWrapper (prefix=spring.datasource.druid, ignoreInvalidFields=false, ignoreUnknownFields=true, ignoreNestedProperties=false); nested exception is org.springframework.validation.BindException: org.springframework.boot.bind.RelaxedDataBinder$RelaxedBeanPropertyBindingResult: 1 errors Field error in object 'spring.datasource.druid' on field 'driver': rejected value [com.mysql.jdbc.Driver]; codes [typeMismatch.spring.datasource.druid.driver,typeMismatch.driver,typeMismatch.java.sql.Driver,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [spring.datasource.druid.driver,driver]; arguments []; default message [driver]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.sql.Driver' for property 'driver'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'java.sql.Driver' for property 'driver': no matching editors or conversion strategy found] 2017-11-14 14:17:20.106 INFO 6044 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat] 2017-11-14 14:17:20.182 INFO 6044 --- [ main] utoConfigurationReportLoggingInitializer : Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled. 2017-11-14 14:17:20.192 ERROR 6044 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** Description: Binding to target { CreateTime:"2017-11-14 14:17:17", ActiveCount:0, PoolingCount:0, CreateCount:0, DestroyCount:0, CloseCount:0, ConnectCount:0, Connections:[ ] } failed: Property: spring.datasource.druid.driver Value: com.mysql.jdbc.Driver Reason: Failed to convert property value of type 'java.lang.String' to required type 'java.sql.Driver' for property 'driver'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'java.sql.Driver' for property 'driver': no matching editors or conversion strategy found Action: Update your application's configuration

我的yml配置是

spring:
  profiles:
    active: prod
    
  datasource:
    druid:
      driver: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/springboot
      username: root
      password: 123456
      # 启动ConfigFilter
      filter:
        config:
          enabled: true
      # 初始化大小,最小,最大
      initial-size: 5
      min-idle: 5
      max-active: 100
      # 配置获取连接等待超时的时间
      max-wait: 60000
      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      time-between-eviction-runs-millis: 60000
      # 配置一个连接在池中最小生存的时间,单位是毫秒
      min-evictable-idle-time-millis: 300000
      # 检测连接是否有效的sql
      validation-query: select 'x'
      validation-query-timeout: 60000
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      # PSCache Mysql下建议关闭
      pool-prepared-statements: false
      max-pool-prepared-statement-per-connection-size: -1
      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
      filters: stat,wall,log4j
    
  mvc:
    view:
      prefix: /WEB-INF/jsp
      suffix: .jsp
    
logging:
  level: 
    root: info
  file: log/oda.log
  
server:
  jsp-servlet:
    init-parameters:
      development: true

driver配置错了吗?应如何解决问题

去掉driver: com.mysql.jdbc.Driver ,不需要配置的

一直用 nutz-plugins-spring-boot-starter coding起来带风啊

启动器内置了baseService 用起来更带风

添加回复
请先登陆
回到顶部