diff --git a/http-service/pom.xml b/http-service/pom.xml
index 75e257d32d..32dc046a4c 100644
--- a/http-service/pom.xml
+++ b/http-service/pom.xml
@@ -55,6 +55,10 @@
spring-boot-devtools
true
+
+ org.springframework
+ spring-jdbc
+
org.mapstruct
@@ -130,6 +134,11 @@
3.7.0
test
+
+ com.h2database
+ h2
+ test
+
diff --git a/http-service/src/main/java/net/runelite/http/service/SpringBootWebApplication.java b/http-service/src/main/java/net/runelite/http/service/SpringBootWebApplication.java
index 562d93445a..bfdac0a254 100644
--- a/http-service/src/main/java/net/runelite/http/service/SpringBootWebApplication.java
+++ b/http-service/src/main/java/net/runelite/http/service/SpringBootWebApplication.java
@@ -25,13 +25,11 @@
package net.runelite.http.service;
import ch.qos.logback.classic.LoggerContext;
+import com.google.common.base.Strings;
import java.io.IOException;
import java.time.Instant;
import java.util.HashMap;
import java.util.Map;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
@@ -44,11 +42,17 @@ import okhttp3.Cache;
import okhttp3.OkHttpClient;
import org.slf4j.ILoggerFactory;
import org.slf4j.impl.StaticLoggerBinder;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.Bean;
+import org.springframework.jdbc.datasource.lookup.JndiDataSourceLookup;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.sql2o.Sql2o;
import org.sql2o.converters.Converter;
@@ -56,6 +60,7 @@ import org.sql2o.quirks.NoQuirks;
@SpringBootApplication
@EnableScheduling
+@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
@Slf4j
public class SpringBootWebApplication extends SpringBootServletInitializer
{
@@ -96,35 +101,80 @@ public class SpringBootWebApplication extends SpringBootServletInitializer
};
}
- private Context getContext() throws NamingException
+ @ConfigurationProperties(prefix = "datasource.runelite")
+ @Bean("dataSourceRuneLite")
+ public DataSourceProperties dataSourceProperties()
{
- Context initCtx = new InitialContext();
- return (Context) initCtx.lookup("java:comp/env");
+ return new DataSourceProperties();
+ }
+
+ @ConfigurationProperties(prefix = "datasource.runelite-cache")
+ @Bean("dataSourceRuneLiteCache")
+ public DataSourceProperties dataSourcePropertiesCache()
+ {
+ return new DataSourceProperties();
+ }
+
+ @ConfigurationProperties(prefix = "datasource.runelite-tracker")
+ @Bean("dataSourceRuneLiteTracker")
+ public DataSourceProperties dataSourcePropertiesTracker()
+ {
+ return new DataSourceProperties();
+ }
+
+ @Bean(value = "runelite", destroyMethod = "")
+ public DataSource runeliteDataSource(@Qualifier("dataSourceRuneLite") DataSourceProperties dataSourceProperties)
+ {
+ return getDataSource(dataSourceProperties);
+ }
+
+ @Bean(value = "runelite-cache", destroyMethod = "")
+ public DataSource runeliteCache2DataSource(@Qualifier("dataSourceRuneLiteCache") DataSourceProperties dataSourceProperties)
+ {
+ return getDataSource(dataSourceProperties);
+ }
+
+ @Bean(value = "runelite-tracker", destroyMethod = "")
+ public DataSource runeliteTrackerDataSource(@Qualifier("dataSourceRuneLiteTracker") DataSourceProperties dataSourceProperties)
+ {
+ return getDataSource(dataSourceProperties);
}
@Bean("Runelite SQL2O")
- Sql2o sql2o() throws NamingException
+ public Sql2o sql2o(@Qualifier("runelite") DataSource dataSource)
{
- DataSource dataSource = (DataSource) getContext().lookup("jdbc/runelite");
- Map converters = new HashMap<>();
- converters.put(Instant.class, new InstantConverter());
- return new Sql2o(dataSource, new NoQuirks(converters));
+ return createSql2oFromDataSource(dataSource);
}
@Bean("Runelite Cache SQL2O")
- Sql2o cacheSql2o() throws NamingException
+ public Sql2o cacheSql2o(@Qualifier("runelite-cache") DataSource dataSource)
{
- DataSource dataSource = (DataSource) getContext().lookup("jdbc/runelite-cache2");
- Map converters = new HashMap<>();
- converters.put(Instant.class, new InstantConverter());
- return new Sql2o(dataSource, new NoQuirks(converters));
+ return createSql2oFromDataSource(dataSource);
}
@Bean("Runelite XP Tracker SQL2O")
- Sql2o trackerSql2o() throws NamingException
+ public Sql2o trackerSql2o(@Qualifier("runelite-tracker") DataSource dataSource)
{
- DataSource dataSource = (DataSource) getContext().lookup("jdbc/runelite-tracker");
- Map converters = new HashMap<>();
+ return createSql2oFromDataSource(dataSource);
+ }
+
+ private static DataSource getDataSource(DataSourceProperties dataSourceProperties)
+ {
+ if (!Strings.isNullOrEmpty(dataSourceProperties.getJndiName()))
+ {
+ // Use JNDI provided datasource, which is already configured with pooling
+ JndiDataSourceLookup dataSourceLookup = new JndiDataSourceLookup();
+ return dataSourceLookup.getDataSource(dataSourceProperties.getJndiName());
+ }
+ else
+ {
+ return dataSourceProperties.initializeDataSourceBuilder().build();
+ }
+ }
+
+ private static Sql2o createSql2oFromDataSource(final DataSource dataSource)
+ {
+ final Map converters = new HashMap<>();
converters.put(Instant.class, new InstantConverter());
return new Sql2o(dataSource, new NoQuirks(converters));
}
diff --git a/http-service/src/main/resources/application.yaml b/http-service/src/main/resources/application.yaml
new file mode 100644
index 0000000000..7b6785a325
--- /dev/null
+++ b/http-service/src/main/resources/application.yaml
@@ -0,0 +1,7 @@
+datasource:
+ runelite:
+ jndiName: java:comp/env/jdbc/runelite
+ runelite-cache:
+ jndiName: java:comp/env/jdbc/runelite-cache2
+ runelite-tracker:
+ jndiName: java:comp/env/jdbc/runelite-tracker
\ No newline at end of file
diff --git a/http-service/src/test/java/net/runelite/http/service/SpringBootWebApplicationTest.java b/http-service/src/test/java/net/runelite/http/service/SpringBootWebApplicationTest.java
index 0503c075d8..d2d488e1e6 100644
--- a/http-service/src/test/java/net/runelite/http/service/SpringBootWebApplicationTest.java
+++ b/http-service/src/test/java/net/runelite/http/service/SpringBootWebApplicationTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, Adam
+ * Copyright (c) 2019, Adam
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -24,57 +24,23 @@
*/
package net.runelite.http.service;
-import java.time.Instant;
-import java.util.HashMap;
-import java.util.Map;
-import javax.naming.NamingException;
-import net.runelite.http.service.util.InstantConverter;
import org.junit.Ignore;
import org.junit.Test;
import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.context.annotation.Bean;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import org.sql2o.Sql2o;
-import org.sql2o.converters.Converter;
-import org.sql2o.quirks.NoQuirks;
-@SpringBootApplication
-@EnableScheduling
public class SpringBootWebApplicationTest
{
- @Bean("Runelite SQL2O")
- Sql2o sql2o()
- {
- Map converters = new HashMap<>();
- converters.put(Instant.class, new InstantConverter());
- return new Sql2o("jdbc:mysql://192.168.1.2/runelite", "runelite", "runelite", new NoQuirks(converters));
- }
-
- @Bean("Runelite Cache SQL2O")
- Sql2o cacheSql2o() throws NamingException
- {
- Map converters = new HashMap<>();
- converters.put(Instant.class, new InstantConverter());
- return new Sql2o("jdbc:mysql://192.168.1.2/cache", "runelite", "runelite", new NoQuirks(converters));
- }
-
- @Bean("Runelite XP Tracker SQL2O")
- Sql2o xpSql2o() throws NamingException
- {
- Map converters = new HashMap<>();
- converters.put(Instant.class, new InstantConverter());
- return new Sql2o("jdbc:mysql://192.168.1.2/xptracker", "runelite", "runelite", new NoQuirks(converters));
- }
-
@Test
@Ignore
- public void test() throws InterruptedException
+ public void run() throws InterruptedException
{
- SpringApplication.run(SpringBootWebApplicationTest.class, new String[0]);
+ String[] args = new String[]{
+ "--spring.config.location=classpath:/application.yaml,classpath:/dev.yaml"
+ };
+ SpringApplication.run(SpringBootWebApplication.class, args);
for (;;)
{
Thread.sleep(100L);
}
}
-}
+}
\ No newline at end of file
diff --git a/http-service/src/test/resources/application.properties b/http-service/src/test/resources/application.properties
deleted file mode 100644
index ded3472a5c..0000000000
--- a/http-service/src/test/resources/application.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-oauth.client-id=moo
-oauth.client-secret=cow
-minio.endpoint=http://10.96.22.171:9000
-minio.accesskey=AM54M27O4WZK65N6F8IP
-minio.secretkey=/PZCxzmsJzwCHYlogcymuprniGCaaLUOET2n6yMP
-minio.bucket=runelite
-runelite.twitter.consumerkey=moo
-runelite.twitter.secretkey=cow
-runelite.twitter.listid=968949795153948673
-logging.level.net.runelite=DEBUG
\ No newline at end of file
diff --git a/http-service/src/test/resources/application.yaml b/http-service/src/test/resources/application.yaml
new file mode 100644
index 0000000000..128e64d8ef
--- /dev/null
+++ b/http-service/src/test/resources/application.yaml
@@ -0,0 +1,35 @@
+oauth:
+ client-id: moo
+ client-secret: cow
+
+minio:
+ endpoint: http://10.96.22.171:9000
+ accesskey: AM54M27O4WZK65N6F8IP
+ secretkey: /PZCxzmsJzwCHYlogcymuprniGCaaLUOET2n6yMP
+ bucket: runelite
+
+runelite:
+ twitter:
+ consumerkey: moo
+ secretkey: cow
+ listid: 968949795153948673
+
+logging:
+ level:
+ net:
+ runelite:
+ DEBUG
+
+datasource:
+ runelite:
+ driverClassName: org.h2.Driver
+ type: org.h2.jdbcx.JdbcDataSource
+ url: jdbc:h2:mem:runelite
+ runelite-cache:
+ driverClassName: org.h2.Driver
+ type: org.h2.jdbcx.JdbcDataSource
+ url: jdbc:h2:mem:cache
+ runelite-tracker:
+ driverClassName: org.h2.Driver
+ type: org.h2.jdbcx.JdbcDataSource
+ url: jdbc:h2:mem:xptracker
diff --git a/http-service/src/test/resources/dev.yaml b/http-service/src/test/resources/dev.yaml
new file mode 100644
index 0000000000..e4967ccee4
--- /dev/null
+++ b/http-service/src/test/resources/dev.yaml
@@ -0,0 +1,19 @@
+datasource:
+ runelite:
+ driverClassName: com.mysql.jdbc.Driver
+ type: com.mysql.jdbc.jdbc2.optional.MysqlDataSource
+ url: jdbc:mysql://192.168.1.2/runelite
+ username: runelite
+ password: runelite
+ runelite-cache:
+ driverClassName: com.mysql.jdbc.Driver
+ type: com.mysql.jdbc.jdbc2.optional.MysqlDataSource
+ url: jdbc:mysql://192.168.1.2/cache
+ username: runelite
+ password: runelite
+ runelite-tracker:
+ driverClassName: com.mysql.jdbc.Driver
+ type: com.mysql.jdbc.jdbc2.optional.MysqlDataSource
+ url: jdbc:mysql://192.168.1.2/xptracker
+ username: runelite
+ password: runelite