add a special prefix into ha-datasource properties file

In order to put HA Datasource properties and other properties altogether into one properties file, HighAvailableDataSource add a new field named propertyPrefix.
This commit is contained in:
DigitalSonic
2018-12-13 00:15:47 +08:00
parent 6ce53e3203
commit 65fafdb67a
4 changed files with 64 additions and 4 deletions
@@ -44,8 +44,12 @@ public class DataSourceCreator {
private List<String> nameList = new ArrayList<String>();
public DataSourceCreator(String file) {
this(file, "");
}
public DataSourceCreator(String file, String propertyPrefix) {
loadProperties(file);
loadNameList();
loadNameList(propertyPrefix);
}
public Map<String, DataSource> createMap(HighAvailableDataSource haDataSource) throws SQLException {
@@ -119,10 +123,14 @@ public class DataSourceCreator {
return dataSource;
}
private void loadNameList() {
private void loadNameList(String propertyPrefix) {
Set<String> names = new HashSet<String>();
for (String n : properties.stringPropertyNames()) {
if (n.contains(".url")) {
if (propertyPrefix != null && !propertyPrefix.isEmpty()
&& !n.startsWith(propertyPrefix)) {
continue;
}
if (n.endsWith(".url")) {
names.add(n.split("\\.url")[0]);
}
}
@@ -167,4 +175,8 @@ public class DataSourceCreator {
LOG.warn("File " + file + " can't be loaded!");
}
}
public List<String> getNameList() {
return nameList;
}
}
@@ -88,6 +88,7 @@ public class HighAvailableDataSource extends WrapperAdapter implements DataSourc
private Map<String, DataSource> dataSourceMap = new ConcurrentHashMap<String, DataSource>();
private DataSourceSelector selector = new RandomDataSourceSelector(this);
private String dataSourceFile = DEFAULT_DATA_SOURCE_FILE;
private String propertyPrefix = "";
private boolean inited = false;
@@ -100,7 +101,7 @@ public class HighAvailableDataSource extends WrapperAdapter implements DataSourc
return;
}
if (dataSourceMap == null || dataSourceMap.isEmpty()) {
dataSourceMap = new DataSourceCreator(dataSourceFile).createMap(this);
dataSourceMap = new DataSourceCreator(dataSourceFile, propertyPrefix).createMap(this);
}
if (selector == null) {
selector = new RandomDataSourceSelector(this);
@@ -146,6 +147,14 @@ public class HighAvailableDataSource extends WrapperAdapter implements DataSourc
this.dataSourceFile = dataSourceFile;
}
public String getPropertyPrefix() {
return propertyPrefix;
}
public void setPropertyPrefix(String propertyPrefix) {
this.propertyPrefix = propertyPrefix;
}
public void setDataSourceMap(Map<String, DataSource> dataSourceMap) {
if (dataSourceMap != null) {
this.dataSourceMap = dataSourceMap;
@@ -3,11 +3,29 @@ package com.alibaba.druid.pool.ha;
import org.junit.Test;
import javax.sql.DataSource;
import java.util.List;
import java.util.Map;
import static org.junit.Assert.*;
public class DataSourceCreatorTest {
@Test
public void testNameList() {
String file = "/com/alibaba/druid/pool/ha/ha-with-prefix-datasource.properties";
DataSourceCreator creator = new DataSourceCreator(file, "prefix1");
List<String> list = creator.getNameList();
assertFalse(list.isEmpty());
assertEquals(1, list.size());
assertEquals("prefix1.foo", list.get(0));
creator = new DataSourceCreator(file);
list = creator.getNameList();
assertEquals(3, list.size());
for (String k : list) {
assertNotEquals("bar", k);
}
}
@Test
public void createMap() throws Exception {
HighAvailableDataSource highAvailableDataSource = new HighAvailableDataSource();
@@ -19,4 +37,21 @@ public class DataSourceCreatorTest {
assertNotNull(map.get("bar"));
}
@Test
public void createMapWithPrefix() throws Exception {
HighAvailableDataSource highAvailableDataSource = new HighAvailableDataSource();
String file = "/com/alibaba/druid/pool/ha/ha-with-prefix-datasource.properties";
DataSourceCreator creator = new DataSourceCreator(file, "prefix1");
Map<String, DataSource> map = creator.createMap(highAvailableDataSource);
assertEquals(1, map.size());
assertNotNull(map.get("prefix1.foo"));
assertNull(map.get("prefix2.foo"));
creator = new DataSourceCreator(file, "prefix2");
map = creator.createMap(highAvailableDataSource);
assertEquals(1, map.size());
assertNull(map.get("prefix1.foo"));
assertNotNull(map.get("prefix2.foo"));
}
}
@@ -0,0 +1,4 @@
prefix1.foo.url=jdbc:derby:memory:foo1;create=true
prefix2.foo.url=jdbc:derby:memory:foo2;create=true
foo.url=jdbc:derby:memory:foo3;create=true
bar=jdbc:derby:memory:bar;create=true