Skip to content

Commit 9febd4a

Browse files
makingDave Syer
authored andcommitted
Support sqlScriptEncoding in schema.sql
Fixes gh-1165, fixes gh-1164
1 parent 7e24c84 commit 9febd4a

File tree

6 files changed

+45
-0
lines changed

6 files changed

+45
-0
lines changed

spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceInitializer.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ private void runScripts(List<Resource> resources) {
135135
ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
136136
populator.setContinueOnError(this.properties.isContinueOnError());
137137
populator.setSeparator(this.properties.getSeparator());
138+
populator.setSqlScriptEncoding(this.properties.getSqlScriptEncoding());
138139
for (Resource resource : resources) {
139140
populator.addScript(resource);
140141
}

spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceProperties.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ public class DataSourceProperties implements BeanClassLoaderAware, InitializingB
5656

5757
private String separator = ";";
5858

59+
private String sqlScriptEncoding;
60+
5961
private EmbeddedDatabaseConnection embeddedDatabaseConnection = EmbeddedDatabaseConnection.NONE;
6062

6163
private DriverClassNameProvider driverClassNameProvider = new DriverClassNameProvider();
@@ -196,6 +198,14 @@ public void setSeparator(String separator) {
196198
this.separator = separator;
197199
}
198200

201+
public String getSqlScriptEncoding() {
202+
return sqlScriptEncoding;
203+
}
204+
205+
public void setSqlScriptEncoding(String sqlScriptEncoding) {
206+
this.sqlScriptEncoding = sqlScriptEncoding;
207+
}
208+
199209
public ClassLoader getClassLoader() {
200210
return this.classLoader;
201211
}

spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceInitializerTests.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,33 @@ public void testDataSourceInitializedWithMultipleScripts() throws Exception {
143143
template.queryForObject("SELECT COUNT(*) from SPAM", Integer.class));
144144
}
145145

146+
@Test
147+
public void testDataSourceInitializedWithExplicitSqlScriptEncoding() throws Exception {
148+
this.context.register(DataSourceAutoConfiguration.class,
149+
PropertyPlaceholderAutoConfiguration.class);
150+
EnvironmentTestUtils.addEnvironment(
151+
this.context,
152+
"spring.datasource.initialize:true",
153+
"spring.datasource.sqlScriptEncoding:UTF-8",
154+
"spring.datasource.schema:"
155+
+ ClassUtils.addResourcePathToPackagePath(getClass(),
156+
"encoding-schema.sql"),
157+
"spring.datasource.data:"
158+
+ ClassUtils.addResourcePathToPackagePath(getClass(),
159+
"encoding-data.sql"));
160+
this.context.refresh();
161+
DataSource dataSource = this.context.getBean(DataSource.class);
162+
assertTrue(dataSource instanceof org.apache.tomcat.jdbc.pool.DataSource);
163+
assertNotNull(dataSource);
164+
JdbcOperations template = new JdbcTemplate(dataSource);
165+
assertEquals(new Integer(2),
166+
template.queryForObject("SELECT COUNT(*) from BAR", Integer.class));
167+
assertEquals("bar",
168+
template.queryForObject("SELECT name from BAR WHERE id=1", String.class));
169+
assertEquals("ばー",
170+
template.queryForObject("SELECT name from BAR WHERE id=2", String.class));
171+
}
172+
146173
@Configuration
147174
@EnableConfigurationProperties
148175
protected static class TwoDataSources {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
INSERT INTO BAR(id, name) VALUES (1, 'bar');
2+
INSERT INTO BAR(id, name) VALUES (2, 'ばー');
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
CREATE TABLE BAR (
2+
id INTEGER PRIMARY KEY,
3+
name VARCHAR(30),
4+
);

spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ content into your application; rather pick only the properties that you need.
158158
spring.datasource.initialize=true # populate using data.sql
159159
spring.datasource.schema= # a schema (DDL) script resource reference
160160
spring.datasource.data= # a data (DML) script resource reference
161+
spring.datasource.sqlScriptEncoding= # a charset for reading SQL scripts
161162
spring.datasource.platform= # the platform to use in the schema resource (schema-${platform}.sql)
162163
spring.datasource.continueOnError=false # continue even if can't be initialized
163164
spring.datasource.separator=; # statement separator in SQL initialization scripts

0 commit comments

Comments
 (0)