hikaricp module (#1781)
* jvm log forging * jvm log forging * jvm log forging * log forging * adding hikariCP module * try-with-resources * adding employee use case
This commit is contained in:
		
							parent
							
								
									0be7de2c42
								
							
						
					
					
						commit
						1cc1f703be
					
				| @ -8,12 +8,6 @@ | ||||
| 
 | ||||
| 	<name>core-java</name> | ||||
| 
 | ||||
|     <parent> | ||||
|         <groupId>com.baeldung</groupId> | ||||
|         <artifactId>parent-modules</artifactId> | ||||
|         <version>1.0.0-SNAPSHOT</version> | ||||
|     </parent> | ||||
| 
 | ||||
| 	<dependencies> | ||||
| 
 | ||||
| 		<!-- utils --> | ||||
| @ -79,6 +73,30 @@ | ||||
| 			<version>${jackson.version}</version> | ||||
| 		</dependency> | ||||
| 
 | ||||
| 		<!-- logging --> | ||||
| 
 | ||||
| 		<dependency> | ||||
| 			<groupId>org.slf4j</groupId> | ||||
| 			<artifactId>slf4j-api</artifactId> | ||||
| 			<version>${org.slf4j.version}</version> | ||||
| 		</dependency> | ||||
| 		<dependency> | ||||
| 			<groupId>ch.qos.logback</groupId> | ||||
| 			<artifactId>logback-classic</artifactId> | ||||
| 			<version>${logback.version}</version> | ||||
| 			<!-- <scope>runtime</scope> --> | ||||
| 		</dependency> | ||||
| 		<dependency> | ||||
| 			<groupId>org.slf4j</groupId> | ||||
| 			<artifactId>jcl-over-slf4j</artifactId> | ||||
| 			<version>${org.slf4j.version}</version> | ||||
| 			<!-- <scope>runtime</scope> --> <!-- some spring dependencies need to compile against jcl --> | ||||
| 		</dependency> | ||||
| 		<dependency> <!-- needed to bridge to slf4j for projects that use the log4j APIs directly --> | ||||
| 			<groupId>org.slf4j</groupId> | ||||
| 			<artifactId>log4j-over-slf4j</artifactId> | ||||
| 			<version>${org.slf4j.version}</version> | ||||
| 		</dependency> | ||||
| 		<dependency> | ||||
| 			<groupId>org.projectlombok</groupId> | ||||
| 			<artifactId>lombok</artifactId> | ||||
| @ -86,14 +104,34 @@ | ||||
| 			<scope>provided</scope> | ||||
| 		</dependency> | ||||
| 
 | ||||
|         <!-- mysql --> | ||||
| 		<!-- test scoped --> | ||||
| 
 | ||||
| 		<dependency> | ||||
|             <groupId>mysql</groupId> | ||||
|             <artifactId>mysql-connector-java</artifactId> | ||||
|             <version>${mysql.version}</version> | ||||
| 			<groupId>org.hamcrest</groupId> | ||||
| 			<artifactId>hamcrest-all</artifactId> | ||||
| 			<version>1.3</version> | ||||
| 			<scope>test</scope> | ||||
| 		</dependency> | ||||
| 
 | ||||
|         <!-- test scoped --> | ||||
| 		<dependency> | ||||
| 			<groupId>junit</groupId> | ||||
| 			<artifactId>junit</artifactId> | ||||
| 			<version>${junit.version}</version> | ||||
| 			<scope>test</scope> | ||||
| 		</dependency> | ||||
| 
 | ||||
| 		<dependency> | ||||
| 			<groupId>org.hamcrest</groupId> | ||||
| 			<artifactId>hamcrest-core</artifactId> | ||||
| 			<version>${org.hamcrest.version}</version> | ||||
| 			<scope>test</scope> | ||||
| 		</dependency> | ||||
| 		<dependency> | ||||
| 			<groupId>org.hamcrest</groupId> | ||||
| 			<artifactId>hamcrest-library</artifactId> | ||||
| 			<version>${org.hamcrest.version}</version> | ||||
| 			<scope>test</scope> | ||||
| 		</dependency> | ||||
| 
 | ||||
| 		<dependency> | ||||
| 			<groupId>org.assertj</groupId> | ||||
| @ -102,6 +140,19 @@ | ||||
| 			<scope>test</scope> | ||||
| 		</dependency> | ||||
| 
 | ||||
| 		<dependency> | ||||
| 			<groupId>org.testng</groupId> | ||||
| 			<artifactId>testng</artifactId> | ||||
| 			<version>${testng.version}</version> | ||||
| 			<scope>test</scope> | ||||
| 		</dependency> | ||||
| 
 | ||||
| 		<dependency> | ||||
| 			<groupId>org.mockito</groupId> | ||||
| 			<artifactId>mockito-core</artifactId> | ||||
| 			<version>${mockito.version}</version> | ||||
| 			<scope>test</scope> | ||||
| 		</dependency> | ||||
| 		<dependency> | ||||
| 			<groupId>com.jayway.awaitility</groupId> | ||||
| 			<artifactId>awaitility</artifactId> | ||||
| @ -120,28 +171,24 @@ | ||||
| 			<artifactId>moneta</artifactId> | ||||
| 			<version>1.1</version> | ||||
| 		</dependency> | ||||
|         <dependency> | ||||
|             <groupId>org.owasp.esapi</groupId> | ||||
|             <artifactId>esapi</artifactId> | ||||
|             <version>2.1.0.1</version> | ||||
|             <exclusions> | ||||
|                 <exclusion> | ||||
|                     <artifactId>commons-logging</artifactId> | ||||
|                     <groupId>commons-logging</groupId> | ||||
|                 </exclusion> | ||||
|             </exclusions> | ||||
|         </dependency> | ||||
| 
 | ||||
| 		<dependency> | ||||
| 			<groupId>org.owasp.esapi</groupId> | ||||
| 			<artifactId>esapi</artifactId> | ||||
| 			<version>2.1.0.1</version> | ||||
|             <exclusions> | ||||
|                 <exclusion> | ||||
|                     <artifactId>commons-logging</artifactId> | ||||
|                     <groupId>commons-logging</groupId> | ||||
|                 </exclusion> | ||||
|             </exclusions> | ||||
| 		</dependency> | ||||
| 
 | ||||
| 		<dependency> | ||||
| 			<groupId>com.zaxxer</groupId> | ||||
| 			<artifactId>HikariCP</artifactId> | ||||
| 			<version>2.6.1</version> | ||||
| 			<scope>compile</scope> | ||||
| 		</dependency> | ||||
| 
 | ||||
| 		<dependency> | ||||
| 			<groupId>org.postgresql</groupId> | ||||
| 			<artifactId>postgresql</artifactId> | ||||
| 			<version>42.0.0</version> | ||||
| 		</dependency> | ||||
| 
 | ||||
| 	</dependencies> | ||||
| @ -156,6 +203,30 @@ | ||||
| 		</resources> | ||||
| 
 | ||||
| 		<plugins> | ||||
| 
 | ||||
| 			<plugin> | ||||
| 				<groupId>org.apache.maven.plugins</groupId> | ||||
| 				<artifactId>maven-compiler-plugin</artifactId> | ||||
| 				<version>${maven-compiler-plugin.version}</version> | ||||
| 				<configuration> | ||||
| 					<source>1.8</source> | ||||
| 					<target>1.8</target> | ||||
| 				</configuration> | ||||
| 			</plugin> | ||||
| 
 | ||||
| 			<plugin> | ||||
| 				<groupId>org.apache.maven.plugins</groupId> | ||||
| 				<artifactId>maven-surefire-plugin</artifactId> | ||||
| 				<configuration> | ||||
| 					<excludes> | ||||
| 						<exclude>**/*IntegrationTest.java</exclude> | ||||
| 						<exclude>**/*LongRunningUnitTest.java</exclude> | ||||
| 						<exclude>**/*ManualTest.java</exclude> | ||||
| 					</excludes> | ||||
| 					<testFailureIgnore>true</testFailureIgnore> | ||||
| 				</configuration> | ||||
| 			</plugin> | ||||
| 
 | ||||
| 			<plugin> | ||||
| 				<groupId>org.apache.maven.plugins</groupId> | ||||
| 				<artifactId>maven-dependency-plugin</artifactId> | ||||
| @ -186,6 +257,7 @@ | ||||
| 					</archive> | ||||
| 				</configuration> | ||||
| 			</plugin> | ||||
| 
 | ||||
| 			<plugin> | ||||
| 				<groupId>org.apache.maven.plugins</groupId> | ||||
| 				<artifactId>maven-assembly-plugin</artifactId> | ||||
| @ -209,6 +281,7 @@ | ||||
| 					</execution> | ||||
| 				</executions> | ||||
| 			</plugin> | ||||
| 
 | ||||
| 			<plugin> | ||||
| 				<groupId>org.apache.maven.plugins</groupId> | ||||
| 				<artifactId>maven-shade-plugin</artifactId> | ||||
| @ -229,6 +302,7 @@ | ||||
| 					</execution> | ||||
| 				</executions> | ||||
| 			</plugin> | ||||
| 
 | ||||
| 			<plugin> | ||||
| 				<groupId>com.jolira</groupId> | ||||
| 				<artifactId>onejar-maven-plugin</artifactId> | ||||
| @ -245,6 +319,7 @@ | ||||
| 					</execution> | ||||
| 				</executions> | ||||
| 			</plugin> | ||||
| 
 | ||||
| 			<plugin> | ||||
| 				<groupId>org.springframework.boot</groupId> | ||||
| 				<artifactId>spring-boot-maven-plugin</artifactId> | ||||
| @ -260,6 +335,7 @@ | ||||
| 					</execution> | ||||
| 				</executions> | ||||
| 			</plugin> | ||||
| 
 | ||||
| 		</plugins> | ||||
| 
 | ||||
| 	</build> | ||||
| @ -303,8 +379,9 @@ | ||||
| 		<!-- marshalling --> | ||||
| 		<jackson.version>2.8.5</jackson.version> | ||||
| 
 | ||||
|         <!-- mysql --> | ||||
|         <mysql.version>6.0.6</mysql.version> | ||||
| 		<!-- logging --> | ||||
| 		<org.slf4j.version>1.7.21</org.slf4j.version> | ||||
| 		<logback.version>1.1.7</logback.version> | ||||
| 
 | ||||
| 		<!-- util --> | ||||
| 		<guava.version>21.0</guava.version> | ||||
| @ -320,9 +397,17 @@ | ||||
| 		<lombok.version>1.16.12</lombok.version> | ||||
| 
 | ||||
| 		<!-- testing --> | ||||
| 		<org.hamcrest.version>1.3</org.hamcrest.version> | ||||
| 		<junit.version>4.12</junit.version> | ||||
| 		<mockito.version>1.10.19</mockito.version> | ||||
| 		<testng.version>6.10</testng.version> | ||||
| 		<assertj.version>3.6.1</assertj.version> | ||||
| 		<avaitility.version>1.7.0</avaitility.version> | ||||
| 
 | ||||
| 		<!-- maven plugins --> | ||||
| 		<maven-compiler-plugin.version>3.6.0</maven-compiler-plugin.version> | ||||
| 		<maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version> | ||||
| 
 | ||||
| 	</properties> | ||||
| 
 | ||||
| </project> | ||||
| @ -0,0 +1,48 @@ | ||||
| package com.baeldung.hikaricp; | ||||
| 
 | ||||
| import java.io.PrintWriter; | ||||
| import java.sql.Connection; | ||||
| import java.sql.SQLException; | ||||
| import java.util.Properties; | ||||
| 
 | ||||
| import com.zaxxer.hikari.HikariConfig; | ||||
| import com.zaxxer.hikari.HikariDataSource; | ||||
| 
 | ||||
| public class DataSource { | ||||
| 
 | ||||
| 	private static HikariConfig config = new HikariConfig(); | ||||
| 	private static HikariDataSource ds; | ||||
| 
 | ||||
| 	static { | ||||
| //		config = new HikariConfig("datasource.properties"); | ||||
| 		 | ||||
| //		Properties props = new Properties(); | ||||
| //		props.setProperty("dataSourceClassName", "org.postgresql.ds.PGSimpleDataSource"); | ||||
| //		props.setProperty("dataSource.user", "postgres"); | ||||
| //		props.setProperty("dataSource.password", "postgres"); | ||||
| //		props.setProperty("dataSource.databaseName", "postgres"); | ||||
| //		props.setProperty("dataSource.portNumber", "5432"); | ||||
| //		props.setProperty("dataSource.serverName", "localhost"); | ||||
| //		props.put("dataSource.logWriter", new PrintWriter(System.out)); | ||||
| //		config = new HikariConfig(props); | ||||
| 		 | ||||
| 		config.setJdbcUrl("jdbc:postgresql://localhost:5432/postgres"); | ||||
| 		config.setUsername("postgres"); | ||||
| 		config.setPassword("postgres"); | ||||
| 		config.addDataSourceProperty("cachePrepStmts", "true"); | ||||
| 		config.addDataSourceProperty("prepStmtCacheSize", "250"); | ||||
| 		config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); | ||||
| 		ds = new HikariDataSource(config); | ||||
| 		 | ||||
| //		ds.setJdbcUrl("jdbc:postgresql://localhost:5432/postgres"); | ||||
| //		ds.setUsername("postgres"); | ||||
| //		ds.setPassword("postgres"); | ||||
| 	} | ||||
| 
 | ||||
| 	private DataSource() {} | ||||
| 
 | ||||
| 	public static Connection getConnection() throws SQLException { | ||||
| 		return ds.getConnection(); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
							
								
								
									
										72
									
								
								core-java/src/main/java/com/baeldung/hikaricp/Employee.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								core-java/src/main/java/com/baeldung/hikaricp/Employee.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,72 @@ | ||||
| package com.baeldung.hikaricp; | ||||
| 
 | ||||
| import java.sql.Date; | ||||
| 
 | ||||
| public class Employee { | ||||
| 
 | ||||
| 	private int empNo; | ||||
| 	private String ename; | ||||
| 	private String job; | ||||
| 	private int mgr; | ||||
| 	private Date hiredate; | ||||
| 	private int sal; | ||||
| 	private int comm; | ||||
| 	private int deptno; | ||||
| 
 | ||||
| 	public int getEmpNo() { | ||||
| 		return empNo; | ||||
| 	} | ||||
| 	public void setEmpNo(int empNo) { | ||||
| 		this.empNo = empNo; | ||||
| 	} | ||||
| 	public String getEname() { | ||||
| 		return ename; | ||||
| 	} | ||||
| 	public void setEname(String ename) { | ||||
| 		this.ename = ename; | ||||
| 	} | ||||
| 	 | ||||
| 	public String getJob() { | ||||
| 		return job; | ||||
| 	} | ||||
| 	public void setJob(String job) { | ||||
| 		this.job = job; | ||||
| 	} | ||||
| 	public int getMgr() { | ||||
| 		return mgr; | ||||
| 	} | ||||
| 	public void setMgr(int mgr) { | ||||
| 		this.mgr = mgr; | ||||
| 	} | ||||
| 	public Date getHiredate() { | ||||
| 		return hiredate; | ||||
| 	} | ||||
| 	public void setHiredate(Date hiredate) { | ||||
| 		this.hiredate = hiredate; | ||||
| 	} | ||||
| 	public int getSal() { | ||||
| 		return sal; | ||||
| 	} | ||||
| 	public void setSal(int sal) { | ||||
| 		this.sal = sal; | ||||
| 	} | ||||
| 	public int getComm() { | ||||
| 		return comm; | ||||
| 	} | ||||
| 	public void setComm(int comm) { | ||||
| 		this.comm = comm; | ||||
| 	} | ||||
| 	public int getDeptno() { | ||||
| 		return deptno; | ||||
| 	} | ||||
| 	public void setDeptno(int deptno) { | ||||
| 		this.deptno = deptno; | ||||
| 	} | ||||
| 
 | ||||
| 	@Override | ||||
| 	public String toString() { | ||||
| 		return "Employee [empNo=" + empNo + ", ename=" + ename + ", job=" + job + ", mgr=" + mgr + ", hiredate=" | ||||
| 				+ hiredate + ", sal=" + sal + ", comm=" + comm + ", deptno=" + deptno + "]"; | ||||
| 	} | ||||
| 	 | ||||
| } | ||||
| @ -0,0 +1,38 @@ | ||||
| package com.baeldung.hikaricp; | ||||
| 
 | ||||
| import java.sql.Connection; | ||||
| import java.sql.PreparedStatement; | ||||
| import java.sql.ResultSet; | ||||
| import java.sql.SQLException; | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
| 
 | ||||
| public class HikariCPDemo { | ||||
| 
 | ||||
| 	public static List<Employee> fetchData() { | ||||
| 		final String SQL_QUERY = "select * from emp"; | ||||
| 		List<Employee> employees = null; | ||||
| 		try (Connection con = DataSource.getConnection(); | ||||
| 				PreparedStatement pst = con.prepareStatement(SQL_QUERY); | ||||
| 				ResultSet rs = pst.executeQuery();) { | ||||
| 			employees = new ArrayList<Employee>(); | ||||
| 			Employee employee; | ||||
| 			while (rs.next()) { | ||||
| 				employee = new Employee(); | ||||
| 				employee.setEmpNo(rs.getInt("empno")); | ||||
| 				employee.setEname(rs.getString("ename")); | ||||
| 				employee.setJob(rs.getString("job")); | ||||
| 				employee.setMgr(rs.getInt("mgr")); | ||||
| 				employee.setHiredate(rs.getDate("hiredate")); | ||||
| 				employee.setSal(rs.getInt("sal")); | ||||
| 				employee.setComm(rs.getInt("comm")); | ||||
| 				employee.setDeptno(rs.getInt("deptno")); | ||||
| 				employees.add(employee); | ||||
| 			} | ||||
| 		} catch (SQLException e) { | ||||
| 			e.printStackTrace(); | ||||
| 		} | ||||
| 		return employees; | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
							
								
								
									
										47
									
								
								core-java/src/main/java/com/baeldung/hikaricp/db.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								core-java/src/main/java/com/baeldung/hikaricp/db.sql
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,47 @@ | ||||
| create table dept( | ||||
|   deptno numeric, | ||||
|   dname  varchar(14), | ||||
|   loc    varchar(13), | ||||
|   constraint pk_dept primary key (deptno) | ||||
| ); | ||||
|   | ||||
| create table emp( | ||||
|   empno    numeric, | ||||
|   ename    varchar(10), | ||||
|   job      varchar(9), | ||||
|   mgr      numeric, | ||||
|   hiredate date, | ||||
|   sal      numeric, | ||||
|   comm     numeric, | ||||
|   deptno   numeric, | ||||
|   constraint pk_emp primary key (empno), | ||||
|   constraint fk_deptno foreign key (deptno) references dept (deptno) | ||||
| ); | ||||
| 
 | ||||
| insert into dept values(10, 'ACCOUNTING', 'NEW YORK'); | ||||
| insert into dept values(20, 'RESEARCH', 'DALLAS'); | ||||
| insert into dept values(30, 'SALES', 'CHICAGO'); | ||||
| insert into dept values(40, 'OPERATIONS', 'BOSTON'); | ||||
|   | ||||
| insert into emp values( | ||||
|  7839, 'KING', 'PRESIDENT', null, | ||||
|  to_date('17-11-1981','dd-mm-yyyy'), | ||||
|  7698, null, 10 | ||||
| ); | ||||
| insert into emp values( | ||||
|  7698, 'BLAKE', 'MANAGER', 7839, | ||||
|  to_date('1-5-1981','dd-mm-yyyy'), | ||||
|  7782, null, 20 | ||||
| ); | ||||
| insert into emp values( | ||||
|  7782, 'CLARK', 'MANAGER', 7839, | ||||
|  to_date('9-6-1981','dd-mm-yyyy'), | ||||
|  7566, null, 30 | ||||
| ); | ||||
| insert into emp values( | ||||
|  7566, 'JONES', 'MANAGER', 7839, | ||||
|  to_date('2-4-1981','dd-mm-yyyy'), | ||||
|  7839, null, 40 | ||||
| ); | ||||
| 
 | ||||
| commit; | ||||
							
								
								
									
										6
									
								
								core-java/src/main/resources/datasource.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								core-java/src/main/resources/datasource.properties
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | ||||
| dataSourceClassName=//TBD | ||||
| dataSource.user=//TBD | ||||
| dataSource.password=//TBD | ||||
| dataSource.databaseName=//TBD | ||||
| dataSource.portNumber=//TBD | ||||
| dataSource.serverName=//TBD | ||||
| @ -0,0 +1,19 @@ | ||||
| package com.baeldung.hikaricp; | ||||
| 
 | ||||
| import java.util.List; | ||||
| 
 | ||||
| import org.junit.Ignore; | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| import static org.junit.Assert.assertEquals; | ||||
| 
 | ||||
| public class HikariCPTest { | ||||
| 
 | ||||
| 	@Test | ||||
| //	@Ignore | ||||
|     public void givenConnection_thenFetchDbData() { | ||||
| 		List<Employee> employees = HikariCPDemo.fetchData(); | ||||
| 		assertEquals(4, employees.size()); | ||||
| 	} | ||||
| 	 | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user