DataSource adapters expose setCatalog/setSchema next to setUsername/setPassword

Issue: SPR-14501
This commit is contained in:
Juergen Hoeller 2016-07-21 14:06:40 +02:00
parent e756a5b54b
commit 610bdf1cc3
2 changed files with 79 additions and 6 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2013 the original author or authors. * Copyright 2002-2016 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -39,6 +39,10 @@ public abstract class AbstractDriverBasedDataSource extends AbstractDataSource {
private String password; private String password;
private String catalog;
private String schema;
private Properties connectionProperties; private Properties connectionProperties;
@ -88,6 +92,40 @@ public abstract class AbstractDriverBasedDataSource extends AbstractDataSource {
return this.password; return this.password;
} }
/**
* Specify a database catalog to be applied to each Connection.
* @since 4.3.2
* @see Connection#setCatalog
*/
public void setCatalog(String catalog) {
this.catalog = catalog;
}
/**
* Return the database catalog to be applied to each Connection, if any.
* @since 4.3.2
*/
public String getCatalog() {
return this.catalog;
}
/**
* Specify a database schema to be applied to each Connection.
* @since 4.3.2
* @see Connection#setSchema
*/
public void setSchema(String schema) {
this.schema = schema;
}
/**
* Return the database schema to be applied to each Connection, if any.
* @since 4.3.2
*/
public String getSchema() {
return this.schema;
}
/** /**
* Specify arbitrary connection properties as key/value pairs, * Specify arbitrary connection properties as key/value pairs,
* to be passed to the Driver. * to be passed to the Driver.
@ -152,7 +190,15 @@ public abstract class AbstractDriverBasedDataSource extends AbstractDataSource {
if (password != null) { if (password != null) {
mergedProps.setProperty("password", password); mergedProps.setProperty("password", password);
} }
return getConnectionFromDriver(mergedProps);
Connection con = getConnectionFromDriver(mergedProps);
if (this.catalog != null) {
con.setCatalog(this.catalog);
}
if (this.schema != null) {
con.setSchema(this.schema);
}
return con;
} }
/** /**

View File

@ -65,6 +65,10 @@ public class UserCredentialsDataSourceAdapter extends DelegatingDataSource {
private String password; private String password;
private String catalog;
private String schema;
private final ThreadLocal<JdbcUserCredentials> threadBoundCredentials = private final ThreadLocal<JdbcUserCredentials> threadBoundCredentials =
new NamedThreadLocal<>("Current JDBC user credentials"); new NamedThreadLocal<>("Current JDBC user credentials");
@ -93,6 +97,24 @@ public class UserCredentialsDataSourceAdapter extends DelegatingDataSource {
this.password = password; this.password = password;
} }
/**
* Specify a database catalog to be applied to each retrieved Connection.
* @since 4.3.2
* @see Connection#setCatalog
*/
public void setCatalog(String catalog) {
this.catalog = catalog;
}
/**
* Specify a database schema to be applied to each retrieved Connection.
* @since 4.3.2
* @see Connection#setSchema
*/
public void setSchema(String schema) {
this.schema = schema;
}
/** /**
* Set user credententials for this proxy and the current thread. * Set user credententials for this proxy and the current thread.
@ -128,12 +150,17 @@ public class UserCredentialsDataSourceAdapter extends DelegatingDataSource {
@Override @Override
public Connection getConnection() throws SQLException { public Connection getConnection() throws SQLException {
JdbcUserCredentials threadCredentials = this.threadBoundCredentials.get(); JdbcUserCredentials threadCredentials = this.threadBoundCredentials.get();
if (threadCredentials != null) { Connection con = (threadCredentials != null ?
return doGetConnection(threadCredentials.username, threadCredentials.password); doGetConnection(threadCredentials.username, threadCredentials.password) :
doGetConnection(this.username, this.password));
if (this.catalog != null) {
con.setCatalog(this.catalog);
} }
else { if (this.schema != null) {
return doGetConnection(this.username, this.password); con.setSchema(this.schema);
} }
return con;
} }
/** /**