搭建微服務歷程-3 修改服務提供者Provider 使用jpa配置druid資料來源和監控
1.使用jpa配置druid資料來源和監控
修改pom檔案
<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>AeurekaProvider</groupId>
<artifactId>AeurekaProvider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>provider</name>
<description>Demo project for Spring Boot</description>
<!-- 使用最新的spring-boot版本 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<!-- spring-cloud -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<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>
<!-- spring boot test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 新增Eureka的依賴 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!-- 新增druid依賴 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.11</version>
</dependency>
<!-- jpa依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- datasource -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.方便起見。修改原先的application.properties檔案為application.ym檔案
3.對application.ym檔案進行jpa和datasource配置
jpa:
generate-ddl: false
show-sql: true
hibernate:
ddl-auto: none
datasource: # 指定資料來源
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://域名:3306/User?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=UTC&useSSL=false
username: 使用者名稱
password: 密碼
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
filters: stat
minEvictableIdleTimeMillis: 300000 # 配置一個連線在池中最小生存的時間,單位是毫秒
poolPreparedStatements: true
其中1.域名或ip地址 2.資料庫使用者名稱 3.資料庫密碼
4.配置loggin修改eureka
logging: level: root: INFO org.hibernate: INFO org.hibernate.type.descriptor.sql.BasicBinder: TRACE org.hibernate.type.descriptor.sql.BasicExtractor: TRACE com.itmuch.youran.persistence: ERROR
eureka:
client:
service-url:
defaultZone: http://192.168.1.92:2222/eureka/ #註冊中心地址要換成伺服器地址。或本地ip
instance:
prefer-ip-address: true
# 在開發環境需要使用固定的區域網ip,否則不能在本地開發端進行debug
ip-address: 192.168.1.92
5.配置druid
package com.common;
import java.sql.SQLException;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.jdbc.DatabaseDriver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.alibaba.druid.pool.DruidDataSource;
@Configuration
@EnableConfigurationProperties(DataSourceProperties.class)
public class DruidConfiguration {
@Bean(destroyMethod = "close", initMethod = "init")
@ConfigurationProperties("spring.datasource.*")
public DruidDataSource dataSource(DataSourceProperties properties) {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(properties.determineDriverClassName());
dataSource.setUrl(properties.determineUrl());
dataSource.setUsername(properties.determineUsername());
dataSource.setPassword(properties.determinePassword());
DatabaseDriver databaseDriver = DatabaseDriver
.fromJdbcUrl(properties.determineUrl());
String validationQuery = databaseDriver.getValidationQuery();
if (validationQuery != null) {
dataSource.setTestOnBorrow(true);
dataSource.setValidationQuery(validationQuery);
}
try {
//開啟Druid的監控統計功能,mergeStat代替stat表示sql合併,wall表示防禦SQL注入攻擊
dataSource.setFilters("mergeStat,wall,log4j");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return dataSource;
}
}
6.配置監控
package com.common;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import com.alibaba.druid.support.http.StatViewServlet;
@WebServlet(urlPatterns="/druid/*",
initParams={
@WebInitParam(name="allow",value="106.12.33.1"),// IP白名單 (沒有配置或者為空,則允許所有訪問)
@WebInitParam(name="deny",value="192.168.1.73"),// IP黑名單 (存在共同時,deny優先於allow)
@WebInitParam(name="loginUsername",value="root"),// 使用者名稱
@WebInitParam(name="loginPassword",value="******"),// 密碼
@WebInitParam(name="resetEnable",value="false")// 禁用HTML頁面上的“Reset All”功能
}
)
public class DruidStatViewServlet extends StatViewServlet{
private static final long serialVersionUID = 1250473665002909583L;
}