Skip to content

Commit 7e18aad

Browse files
committed
Merge pull request aol#110 from aol/split-jdbc-into-hikaricp-jdbc
Split jdbc into hikaricp jdbc
2 parents 73a9653 + 888c9ba commit 7e18aad

File tree

23 files changed

+260
-74
lines changed

23 files changed

+260
-74
lines changed

micro-hibernate/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,18 @@ dependencies {
99
compile group: 'org.hibernate', name: 'hibernate-entitymanager', version:hibernateVersion
1010
compile group: 'org.springframework', name: 'spring-orm', version:"${springVersion}"
1111

12-
compile 'com.zaxxer:HikariCP:2.4.0'
1312
compile project(':micro-jdbc')
1413
testCompile project(':micro-jackson-configuration')
1514
testCompile project(':micro-client')
1615
testCompile project(':micro-grizzly')
1716
testCompile project(':micro-jersey')
17+
testCompile project(':micro-hikaricp')
1818
testCompile group: 'org.hsqldb', name:'hsqldb', version:'2.0.0'
1919
}
2020

2121
modifyPom {
2222
project {
23-
name 'Microserver data'
23+
name 'Microserver hibernate'
2424
description 'Opinionated rest microservices'
2525
url 'https://github.com/aol/micro-server'
2626
inceptionYear '2015'

micro-hibernate/readme.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22

33
[micro-hibernate example apps](https://github.com/aol/micro-server/tree/master/micro-hibernate/src/test/java/app)
44

5-
Adds Spring Data, Spring JDBC and Hibernate support.
6-
Creates a DataSource Spring Bean with name "mainDataSource" from v0.63 this will be based on [HikariCP](http://brettwooldridge.github.io/HikariCP/ludicrous.html).
5+
Adds Spring Data, and Hibernate support.
76

87
## To use
98

@@ -16,7 +15,7 @@ Maven
1615

1716
<dependency>
1817
<groupId>com.aol.microservices</groupId>
19-
<artifactId>micro-data</artifactId>
18+
<artifactId>micro-hibernate</artifactId>
2019
<version>x.yz</version>
2120
</dependency>
2221

micro-hibernate/src/main/java/com/aol/micro/server/spring/HibernatePlugin.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010

1111
import com.aol.micro.server.Plugin;
1212
import com.aol.micro.server.servers.model.ServerData;
13-
import com.aol.micro.server.spring.datasource.DataDataSourceBuilder;
1413
import com.aol.micro.server.spring.datasource.JdbcConfig;
1514
import com.aol.micro.server.spring.datasource.hibernate.HibernateConfig;
1615
import com.aol.micro.server.spring.datasource.hibernate.SpringDataConfig;
@@ -34,7 +33,7 @@ public Optional<SpringDBConfig> springDbConfigurer() {
3433

3534
@Override
3635
public Set<Class> springClasses() {
37-
return new HashSet<>(Arrays.asList(JdbcConfig.class, DataDataSourceBuilder.class, SQL.class, SpringDataConfig.class, HibernateConfig.class));
36+
return new HashSet<>(Arrays.asList(JdbcConfig.class, SQL.class, SpringDataConfig.class, HibernateConfig.class));
3837
}
3938

4039
@Override

micro-hibernate/src/main/java/com/aol/micro/server/spring/HibernateSpringConfigurer.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
1313

1414
import com.aol.micro.server.config.Config;
15-
import com.aol.micro.server.spring.datasource.DataDataSourceBuilder;
1615
import com.aol.micro.server.spring.datasource.JdbcConfig;
1716
import com.aol.micro.server.spring.datasource.hibernate.HibernateSessionBuilder;
1817

@@ -36,18 +35,13 @@ public void createSpringApp(String name) {
3635
DataSource dataSource = null;
3736
if(rootContext.containsBean(name+"dataSource"))
3837
dataSource = (DataSource)rootContext.getBean(name+"dataSource");
39-
else
40-
dataSource = buildDataSource(name, jdbc);
38+
4139
SessionFactory sessionFactory = buildSession(name, config, dataSource, jdbc);
4240

4341
beanFactory.registerSingleton(name + "SessionFactory", sessionFactory);
4442
beanFactory.registerSingleton(name + "HibernateTransactionManager", buildTransactionManager(name, config, dataSource, jdbc));
4543

46-
}
47-
48-
private DataSource buildDataSource(String name, JdbcConfig jdbc) {
49-
return DataDataSourceBuilder.builder().env(jdbc).build().mainDataSource();
50-
}
44+
}
5145

5246
private JdbcConfig buildJdbcProperties(AnnotationConfigWebApplicationContext rootContext, String name) {
5347
return JdbcConfig.builder().properties((Properties) rootContext.getBean("propertyFactory")).name(name).build();

micro-hibernate/src/test/java/app/pure/jdbc/com/aol/micro/server/JdbcRunnerTest.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@
1010
import org.junit.Before;
1111
import org.junit.Test;
1212

13-
import app.pure.jdbc.com.aol.micro.server.JdbcEntity;
14-
1513
import com.aol.micro.server.MicroserverApp;
1614
import com.aol.micro.server.config.Microserver;
1715
import com.aol.micro.server.rest.client.nio.AsyncRestClient;
@@ -45,13 +43,10 @@ public void stopServer(){
4543
}
4644

4745
@Test
48-
public void runAppAndBasicTest() throws InterruptedException, ExecutionException{
49-
50-
46+
public void runAppAndBasicTest() throws InterruptedException, ExecutionException{
5147

5248
assertThat(rest.get("http://localhost:8080/jdbc-app/persistence/create"),is("ok"));
53-
assertThat(listClient.get("http://localhost:8080/jdbc-app/persistence/get").get(),is(JdbcEntity.class));
54-
49+
assertThat(listClient.get("http://localhost:8080/jdbc-app/persistence/get").get(),is(JdbcEntity.class));
5550

5651
}
5752

micro-hikaricp/build.gradle

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
description = 'micro-hikaricp'
2+
dependencies {
3+
4+
compile 'com.zaxxer:HikariCP:'+hikariCPVersion
5+
compile project(':micro-core')
6+
compile project(':micro-jdbc')
7+
8+
testCompile project(':micro-client')
9+
testCompile project(':micro-grizzly')
10+
testCompile project(':micro-jersey')
11+
testCompile group: 'org.hsqldb', name:'hsqldb', version:'2.0.0'
12+
}
13+
14+
modifyPom {
15+
project {
16+
name 'Microserver hikaricp'
17+
description 'Opinionated rest microservices'
18+
url 'https://github.com/aol/micro-server'
19+
inceptionYear '2015'
20+
21+
groupId 'com.aol.microservices'
22+
artifactId 'micro-hikaricp'
23+
version "$version"
24+
25+
26+
scm {
27+
url 'scm:git@github.com:aol/micro-server.git'
28+
connection 'scm:git@github.com:aol/micro-server.git'
29+
developerConnection 'scm:git@github.com:aol/micro-server.git'
30+
}
31+
32+
licenses {
33+
license {
34+
name 'The Apache Software License, Version 2.0'
35+
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
36+
distribution 'repo'
37+
}
38+
}
39+
40+
developers {
41+
developer {
42+
id 'johnmcclean-aol'
43+
name 'John McClean'
44+
email 'john.mcclean@teamaol.com'
45+
}
46+
developer {
47+
id 'kewangie'
48+
name 'Ke Wang'
49+
email 'ke.wang@teamaol.com'
50+
}
51+
developer {
52+
id 'earlzero'
53+
name 'Nikita Sapozhnikov'
54+
email 'nikita.sapozhnikov@teamaol.com'
55+
}
56+
}
57+
58+
}
59+
}
60+
61+
extraArchive {
62+
sources = true
63+
tests = true
64+
javadoc = true
65+
}
66+
67+
nexus {
68+
sign = true
69+
repositoryUrl = 'https://oss.sonatype.org/service/local/staging/deploy/maven2'
70+
snapshotRepositoryUrl = 'https://oss.sonatype.org/content/repositories/snapshots'
71+
}
72+

micro-hikaricp/readme.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# HikariCP plugin
2+
3+
[micro-hikaricp example apps](https://github.com/aol/micro-server/tree/master/micro-jdbc/src/test/java/app)
4+
5+
Creates a DataSource Spring Bean with name "mainDataSource". This will be based on [HikariCP](http://brettwooldridge.github.io/HikariCP/ludicrous.html).
6+
7+
## To use
8+
9+
10+
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.aol.microservices/micro-data/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.aol.microservices/micro-jdbc)
11+
12+
Simply add to the classpath
13+
14+
Maven
15+
16+
<dependency>
17+
<groupId>com.aol.microservices</groupId>
18+
<artifactId>micro-hikaricp</artifactId>
19+
<version>x.yz</version>
20+
</dependency>
21+
22+
Gradle
23+
24+
compile 'com.aol.microservices:micro-hikaricp:x.yz'
25+
26+
# Configuring a data source
27+
28+
A datasource can be configured by setting the following properties in application.properties, instance.properties or via the Microserver annotation
29+
30+
db.connection.driver: (e.g. (org.hsqldb.jdbcDriver)
31+
db.connection.url: (e.g. jdbc:hsqldb:mem:aname)
32+
db.connection.username: (e.g. admin)
33+
db.connection.password: (e.g. password)
34+
db.connection.dialect: (e.g. org.hibernate.dialect.HSQLDialect)
35+
db.connection.hibernate.showsql: (e.g. true | false)
36+
db.connection.ddl.auto: (e.g. create-drop)
37+
hikaricp.db.connection.max.pool.size (e.g. 30)
38+
hikaricp.db.connection.min.idle (e.g. 2)
39+
hikaricp.db.connection.idle.timeout (e.g. 1800000)
40+
41+
The Microserver annotation can also be used to set some default properties, or they can be set in an application.properties or instance.properties file ([see wiki for more details](https://github.com/aol/micro-server/wiki/Defining-Properties)).
42+
43+
44+
The important properties for us to set are the datasource properties
45+
46+
@Microserver(properties={"db.connection.driver","org.hsqldb.jdbcDriver",
47+
"db.connection.url","jdbc:hsqldb:mem:aname",
48+
"db.connection.username", "sa"})
49+
50+
public class MyMainClass {
51+
52+
53+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.aol.micro.server.spring;
2+
3+
import java.util.Arrays;
4+
import java.util.HashSet;
5+
import java.util.Set;
6+
import java.util.function.Function;
7+
8+
import javax.servlet.ServletContextListener;
9+
10+
import com.aol.micro.server.Plugin;
11+
import com.aol.micro.server.servers.model.ServerData;
12+
import com.aol.micro.server.spring.datasource.HikariCPConfig;
13+
import com.aol.micro.server.spring.datasource.HikariCPDataSourceBuilder;
14+
15+
/**
16+
*
17+
* @author kewang
18+
*
19+
*/
20+
public class HikariCPPlugin implements Plugin {
21+
22+
@Override
23+
public Set<Class> springClasses() {
24+
return new HashSet<>(Arrays.asList(HikariCPConfig.class, HikariCPDataSourceBuilder.class));
25+
}
26+
27+
@Override
28+
public Set<Function<ServerData, ServletContextListener>> servletContextListeners() {
29+
return null;
30+
}
31+
32+
@Override
33+
public Set<Class> jaxRsResources() {
34+
return null;
35+
}
36+
37+
@Override
38+
public Set<String> jaxRsPackages() {
39+
return null;
40+
}
41+
42+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.aol.micro.server.spring.datasource;
2+
3+
import lombok.Getter;
4+
import lombok.experimental.Builder;
5+
6+
import org.springframework.beans.factory.annotation.Autowired;
7+
import org.springframework.beans.factory.annotation.Value;
8+
import org.springframework.stereotype.Component;
9+
10+
@Getter
11+
@Builder
12+
@Component("hikariCPEnv")
13+
public class HikariCPConfig {
14+
15+
private final int maxPoolSize;
16+
private final int minimumIdle;
17+
private final long idleTimeout;
18+
19+
@Autowired
20+
public HikariCPConfig(@Value("${hikaricp.db.connection.max.pool.size:30}") int maxPoolSize, @Value("${hikaricp.db.connection.min.idle:2}") int minimumIdle,
21+
@Value("${hikaricp.db.connection.idle.timeout:1800000}") long idleTimeout) {
22+
this.maxPoolSize = maxPoolSize;
23+
this.minimumIdle = minimumIdle;
24+
this.idleTimeout = idleTimeout;
25+
}
26+
}

micro-jdbc/src/main/java/com/aol/micro/server/spring/datasource/DataDataSourceBuilder.java renamed to micro-hikaricp/src/main/java/com/aol/micro/server/spring/datasource/HikariCPDataSourceBuilder.java

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
import javax.sql.DataSource;
55

66
import lombok.AllArgsConstructor;
7-
import lombok.experimental.Builder;
87
import lombok.NoArgsConstructor;
8+
import lombok.experimental.Builder;
99

1010
import org.springframework.context.annotation.Bean;
1111
import org.springframework.context.annotation.Configuration;
@@ -16,10 +16,13 @@
1616
@Configuration
1717
@NoArgsConstructor
1818
@AllArgsConstructor
19-
public class DataDataSourceBuilder {
20-
19+
public class HikariCPDataSourceBuilder {
20+
2121
@Resource(name = "mainEnv")
22-
private JdbcConfig env;
22+
private JdbcConfig mainEnv;
23+
24+
@Resource(name = "hikariCPEnv")
25+
private HikariCPConfig hikariCPEnv;
2326

2427
@Bean(destroyMethod = "close", name = "mainDataSource")
2528
public DataSource mainDataSource() {
@@ -29,13 +32,13 @@ public DataSource mainDataSource() {
2932
private DataSource getDataSource() {
3033
HikariDataSource ds = new HikariDataSource();
3134

32-
ds.setDriverClassName(env.getDriverClassName());
33-
ds.setJdbcUrl(env.getUrl());
34-
ds.setUsername(env.getUsername());
35-
ds.setPassword(env.getPassword());
36-
ds.setMaximumPoolSize(env.getMaxPoolSize());
37-
ds.setMinimumIdle(env.getMinimumIdle());
38-
ds.setIdleTimeout(env.getIdleTimeout());
35+
ds.setDriverClassName(mainEnv.getDriverClassName());
36+
ds.setJdbcUrl(mainEnv.getUrl());
37+
ds.setUsername(mainEnv.getUsername());
38+
ds.setPassword(mainEnv.getPassword());
39+
ds.setMaximumPoolSize(hikariCPEnv.getMaxPoolSize());
40+
ds.setMinimumIdle(hikariCPEnv.getMinimumIdle());
41+
ds.setIdleTimeout(hikariCPEnv.getIdleTimeout());
3942

4043
return ds;
4144
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
com.aol.micro.server.spring.HikariCPPlugin

micro-jdbc/src/test/java/app/pure/jdbc/com/aol/micro/server/JdbcRunnerTest.java renamed to micro-hikaricp/src/test/java/app/pure/jdbc/com/aol/micro/server/JdbcRunnerTest.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,7 @@ public void stopServer(){
4343
}
4444

4545
@Test
46-
public void runAppAndBasicTest() throws InterruptedException, ExecutionException{
47-
48-
46+
public void runAppAndBasicTest() throws InterruptedException, ExecutionException {
4947

5048
assertThat(rest.get("http://localhost:8080/jdbc-app/persistence/create"),is("ok"));
5149
assertThat(listClient.get("http://localhost:8080/jdbc-app/persistence/get").get(),is(JdbcEntity.class));

0 commit comments

Comments
 (0)