Reputation: 1013
build.gradle
plugins {
id 'org.springframework.boot' version '2.2.2.RELEASE'
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java'
}
group = 'com.spdemo'
version = '1.0'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude module: 'junit'
}
testImplementation 'org.junit.jupiter:junit-jupiter:5.4.0'
}
test {
useJUnitPlatform()
}
schema.sql
drop table IF EXISTS officers;
create TABLE officers (
id INT NOT NULL AUTO_INCREMENT,
rank VARCHAR(20) NOT NULL,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(20) NOT NULL,
PRIMARY KEY (id)
);
data.sql
INSERT INTO officers(rank, first_name, last_name) VALUES('CAPTAIN', 'James', 'Kirk');
INSERT INTO officers(rank, first_name, last_name) VALUES('CAPTAIN', 'Jean-Luc', 'Picard');
INSERT INTO officers(rank, first_name, last_name) VALUES('CAPTAIN', 'Benjamin', 'Sisko');
INSERT INTO officers(rank, first_name, last_name) VALUES('CAPTAIN', 'Kathryn', 'Janeway');
INSERT INTO officers(rank, first_name, last_name) VALUES('CAPTAIN', 'Jonathan', 'Archer');
JdbcOfficerDAOTest.javba
@SpringBootTest
@ExtendWith(SpringExtension.class)
// @Transactional // tx for each test rolls back by default
public class JdbcOfficerDAOTest {
// @Qualifier("jdbcOfficerDAO")
private Logger logger = LoggerFactory.getLogger(JdbcOfficerDAOTest.class);
@Autowired
private OfficerDAO dao;
@Test
public void save() {
Officer officer = new Officer(Rank.LIEUTENANT, "Nyota", "Uhuru");
officer = dao.save(officer);
assertNotNull(officer.getId());
// assertTrue(!(officer == null));
logger.info("id is: " + officer.getId());
logger.info("I'm here");
}
@Test
public void findByIdThatExists() {
Optional<Officer> officer = dao.findById(1);
logger.info("here is the count: " + dao.count());
assertTrue(officer.isPresent());
// assertEquals(1, officer.get().getId().intValue());
}
}
When I'm running the above test case, the first save() test always passes which means the table is created but the second always fails meaning data.sql is not executed. And the dao.count() always returns 0. How can I fix this?
Upvotes: 0
Views: 4478
Reputation: 1013
spring.jpa.hibernate.ddl-auto=none
I added this line in the application.properties and it fixed the issue. The default setting blocks spring boot from running data.sql
DDL mode. This is actually a shortcut for the "hibernate.hbm2ddl.auto" property.
Defaults to "create-drop" when using an embedded database and no
schema manager was detected. Otherwise, defaults to "none".
none Disable DDL handling.
validate Validate the schema, make no changes to the database.
update Update the schema if necessary.
create Create the schema and destroy previous data.
create-drop Create and then destroy the schema at the end of the session.
Upvotes: 4
Reputation: 534
You can specify the SQL files to run/execute by this property :
spring.datasource.data=classpath:sql_script1.sql,classpath:sql_script2.sql
Upvotes: 0