Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
91da8c9f
Commit
91da8c9f
authored
Dec 16, 2020
by
Stefano Cordio
Committed by
Stephane Nicoll
Jun 14, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add auto-configuration for Spring Data Envers
See gh-22610
parent
de350a05
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
386 additions
and
152 deletions
+386
-152
build.gradle
spring-boot-project/spring-boot-autoconfigure/build.gradle
+1
-0
EnversRevisionRepositoriesRegistrar.java
...nfigure/data/jpa/EnversRevisionRepositoriesRegistrar.java
+41
-0
JpaRepositoriesAutoConfiguration.java
...oconfigure/data/jpa/JpaRepositoriesAutoConfiguration.java
+24
-1
AbstractJpaRepositoriesAutoConfigurationTests.java
...ta/jpa/AbstractJpaRepositoriesAutoConfigurationTests.java
+187
-0
EnversRevisionRepositoriesAutoConfigurationTests.java
...jpa/EnversRevisionRepositoriesAutoConfigurationTests.java
+39
-0
JpaRepositoriesAutoConfigurationTests.java
...igure/data/jpa/JpaRepositoriesAutoConfigurationTests.java
+11
-149
City.java
...pringframework/boot/autoconfigure/data/jpa/city/City.java
+1
-1
CityRepository.java
...work/boot/autoconfigure/data/jpa/city/CityRepository.java
+1
-1
Country.java
...ramework/boot/autoconfigure/data/jpa/country/Country.java
+57
-0
CountryRepository.java
...oot/autoconfigure/data/jpa/country/CountryRepository.java
+24
-0
No files found.
spring-boot-project/spring-boot-autoconfigure/build.gradle
View file @
91da8c9f
...
...
@@ -113,6 +113,7 @@ dependencies {
optional
(
"org.springframework.batch:spring-batch-core"
)
optional
(
"org.springframework.data:spring-data-couchbase"
)
optional
(
"org.springframework.data:spring-data-jpa"
)
optional
(
"org.springframework.data:spring-data-envers"
)
optional
(
"org.springframework.data:spring-data-rest-webmvc"
)
optional
(
"org.springframework.data:spring-data-cassandra"
)
optional
(
"org.springframework.data:spring-data-elasticsearch"
)
{
...
...
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/jpa/EnversRevisionRepositoriesRegistrar.java
0 → 100644
View file @
91da8c9f
/*
* Copyright 2012-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
springframework
.
boot
.
autoconfigure
.
data
.
jpa
;
import
org.springframework.context.annotation.ImportBeanDefinitionRegistrar
;
import
org.springframework.data.envers.repository.support.EnversRevisionRepositoryFactoryBean
;
import
org.springframework.data.jpa.repository.config.EnableJpaRepositories
;
/**
* {@link ImportBeanDefinitionRegistrar} used to auto-configure Spring Data Envers
* Repositories.
*
* @author Stefano Cordio
*/
class
EnversRevisionRepositoriesRegistrar
extends
JpaRepositoriesRegistrar
{
@Override
protected
Class
<?>
getConfiguration
()
{
return
EnableJpaRepositoriesConfiguration
.
class
;
}
@EnableJpaRepositories
(
repositoryFactoryBeanClass
=
EnversRevisionRepositoryFactoryBean
.
class
)
private
static
class
EnableJpaRepositoriesConfiguration
{
}
}
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/jpa/JpaRepositoriesAutoConfiguration.java
View file @
91da8c9f
...
...
@@ -26,6 +26,7 @@ import org.springframework.boot.autoconfigure.condition.AnyNestedCondition;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnBean
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnClass
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.boot.autoconfigure.orm.jpa.EntityManagerFactoryBuilderCustomizer
;
import
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
;
...
...
@@ -35,10 +36,13 @@ import org.springframework.context.annotation.Conditional;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Import
;
import
org.springframework.core.task.AsyncTaskExecutor
;
import
org.springframework.data.envers.repository.config.EnableEnversRepositories
;
import
org.springframework.data.envers.repository.support.EnversRevisionRepositoryFactoryBean
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.data.jpa.repository.config.EnableJpaRepositories
;
import
org.springframework.data.jpa.repository.config.JpaRepositoryConfigExtension
;
import
org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean
;
import
org.springframework.data.repository.history.RevisionRepository
;
/**
* {@link EnableAutoConfiguration Auto-configuration} for Spring Data's JPA Repositories.
...
...
@@ -50,11 +54,17 @@ import org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean;
* Once in effect, the auto-configuration is the equivalent of enabling JPA repositories
* using the {@link EnableJpaRepositories @EnableJpaRepositories} annotation.
* <p>
* In case {@link EnableEnversRepositories} is on the classpath,
* {@link EnversRevisionRepositoryFactoryBean} is used instead of
* {@link JpaRepositoryFactoryBean} to support {@link RevisionRepository} with Hibernate
* Envers.
* <p>
* This configuration class will activate <em>after</em> the Hibernate auto-configuration.
*
* @author Phillip Webb
* @author Josh Long
* @author Scott Frederick
* @author Stefano Cordio
* @since 1.0.0
* @see EnableJpaRepositories
*/
...
...
@@ -64,7 +74,6 @@ import org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean;
@ConditionalOnMissingBean
({
JpaRepositoryFactoryBean
.
class
,
JpaRepositoryConfigExtension
.
class
})
@ConditionalOnProperty
(
prefix
=
"spring.data.jpa.repositories"
,
name
=
"enabled"
,
havingValue
=
"true"
,
matchIfMissing
=
true
)
@Import
(
JpaRepositoriesRegistrar
.
class
)
@AutoConfigureAfter
({
HibernateJpaAutoConfiguration
.
class
,
TaskExecutionAutoConfiguration
.
class
})
public
class
JpaRepositoriesAutoConfiguration
{
...
...
@@ -106,4 +115,18 @@ public class JpaRepositoriesAutoConfiguration {
}
@Configuration
(
proxyBeanMethods
=
false
)
@ConditionalOnClass
(
EnableEnversRepositories
.
class
)
@Import
(
EnversRevisionRepositoriesRegistrar
.
class
)
public
static
class
EnversRevisionRepositoriesRegistrarConfiguration
{
}
@Configuration
(
proxyBeanMethods
=
false
)
@ConditionalOnMissingClass
(
"org.springframework.data.envers.repository.config.EnableEnversRepositories"
)
@Import
(
JpaRepositoriesRegistrar
.
class
)
public
static
class
JpaRepositoriesRegistrarConfiguration
{
}
}
spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/jpa/AbstractJpaRepositoriesAutoConfigurationTests.java
0 → 100644
View file @
91da8c9f
/*
* Copyright 2012-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
springframework
.
boot
.
autoconfigure
.
data
.
jpa
;
import
javax.persistence.EntityManagerFactory
;
import
org.junit.jupiter.api.Test
;
import
org.springframework.boot.autoconfigure.AutoConfigurations
;
import
org.springframework.boot.autoconfigure.TestAutoConfigurationPackage
;
import
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration
;
import
org.springframework.boot.autoconfigure.data.alt.elasticsearch.CityElasticsearchDbRepository
;
import
org.springframework.boot.autoconfigure.data.alt.jpa.CityJpaRepository
;
import
org.springframework.boot.autoconfigure.data.alt.mongo.CityMongoDbRepository
;
import
org.springframework.boot.autoconfigure.data.jpa.city.City
;
import
org.springframework.boot.autoconfigure.data.jpa.city.CityRepository
;
import
org.springframework.boot.autoconfigure.data.jpa.country.Country
;
import
org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration
;
import
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
;
import
org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration
;
import
org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration
;
import
org.springframework.boot.test.context.runner.ApplicationContextRunner
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.ComponentScan.Filter
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.FilterType
;
import
org.springframework.context.annotation.Import
;
import
org.springframework.core.task.SimpleAsyncTaskExecutor
;
import
org.springframework.data.jpa.repository.config.EnableJpaRepositories
;
import
org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean
;
import
org.springframework.scheduling.annotation.EnableScheduling
;
import
org.springframework.transaction.PlatformTransactionManager
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
/**
* Base class for {@link JpaRepositoriesAutoConfiguration} tests.
*
* @author Dave Syer
* @author Oliver Gierke
* @author Scott Frederick
* @author Stefano Cordio
*/
abstract
class
AbstractJpaRepositoriesAutoConfigurationTests
{
final
ApplicationContextRunner
contextRunner
=
new
ApplicationContextRunner
()
.
withConfiguration
(
AutoConfigurations
.
of
(
HibernateJpaAutoConfiguration
.
class
,
JpaRepositoriesAutoConfiguration
.
class
,
PropertyPlaceholderAutoConfiguration
.
class
))
.
withUserConfiguration
(
EmbeddedDataSourceConfiguration
.
class
);
@Test
void
testDefaultRepositoryConfiguration
()
{
this
.
contextRunner
.
withUserConfiguration
(
TestConfiguration
.
class
).
run
((
context
)
->
{
assertThat
(
context
).
hasSingleBean
(
CityRepository
.
class
);
assertThat
(
context
).
hasSingleBean
(
PlatformTransactionManager
.
class
);
assertThat
(
context
).
hasSingleBean
(
EntityManagerFactory
.
class
);
assertThat
(
context
.
getBean
(
LocalContainerEntityManagerFactoryBean
.
class
).
getBootstrapExecutor
()).
isNull
();
});
}
@Test
void
testOverrideRepositoryConfiguration
()
{
this
.
contextRunner
.
withUserConfiguration
(
CustomConfiguration
.
class
).
run
((
context
)
->
{
assertThat
(
context
).
hasSingleBean
(
CityJpaRepository
.
class
);
assertThat
(
context
).
hasSingleBean
(
PlatformTransactionManager
.
class
);
assertThat
(
context
).
hasSingleBean
(
EntityManagerFactory
.
class
);
});
}
@Test
void
autoConfigurationShouldNotKickInEvenIfManualConfigDidNotCreateAnyRepositories
()
{
this
.
contextRunner
.
withUserConfiguration
(
SortOfInvalidCustomConfiguration
.
class
)
.
run
((
context
)
->
assertThat
(
context
).
doesNotHaveBean
(
CityRepository
.
class
));
}
@Test
void
whenBootstrapModeIsLazyWithMultipleAsyncExecutorBootstrapExecutorIsConfigured
()
{
this
.
contextRunner
.
withUserConfiguration
(
MultipleAsyncTaskExecutorConfiguration
.
class
)
.
withConfiguration
(
AutoConfigurations
.
of
(
TaskExecutionAutoConfiguration
.
class
,
TaskSchedulingAutoConfiguration
.
class
))
.
withPropertyValues
(
"spring.data.jpa.repositories.bootstrap-mode=lazy"
)
.
run
((
context
)
->
assertThat
(
context
.
getBean
(
LocalContainerEntityManagerFactoryBean
.
class
).
getBootstrapExecutor
())
.
isEqualTo
(
context
.
getBean
(
"applicationTaskExecutor"
)));
}
@Test
void
whenBootstrapModeIsLazyWithSingleAsyncExecutorBootstrapExecutorIsConfigured
()
{
this
.
contextRunner
.
withUserConfiguration
(
SingleAsyncTaskExecutorConfiguration
.
class
)
.
withPropertyValues
(
"spring.data.jpa.repositories.bootstrap-mode=lazy"
)
.
run
((
context
)
->
assertThat
(
context
.
getBean
(
LocalContainerEntityManagerFactoryBean
.
class
).
getBootstrapExecutor
())
.
isEqualTo
(
context
.
getBean
(
"testAsyncTaskExecutor"
)));
}
@Test
void
whenBootstrapModeIsDeferredBootstrapExecutorIsConfigured
()
{
this
.
contextRunner
.
withUserConfiguration
(
MultipleAsyncTaskExecutorConfiguration
.
class
)
.
withConfiguration
(
AutoConfigurations
.
of
(
TaskExecutionAutoConfiguration
.
class
,
TaskSchedulingAutoConfiguration
.
class
))
.
withPropertyValues
(
"spring.data.jpa.repositories.bootstrap-mode=deferred"
)
.
run
((
context
)
->
assertThat
(
context
.
getBean
(
LocalContainerEntityManagerFactoryBean
.
class
).
getBootstrapExecutor
())
.
isEqualTo
(
context
.
getBean
(
"applicationTaskExecutor"
)));
}
@Test
void
whenBootstrapModeIsDefaultBootstrapExecutorIsNotConfigured
()
{
this
.
contextRunner
.
withUserConfiguration
(
MultipleAsyncTaskExecutorConfiguration
.
class
)
.
withConfiguration
(
AutoConfigurations
.
of
(
TaskExecutionAutoConfiguration
.
class
,
TaskSchedulingAutoConfiguration
.
class
))
.
withPropertyValues
(
"spring.data.jpa.repositories.bootstrap-mode=default"
).
run
((
context
)
->
assertThat
(
context
.
getBean
(
LocalContainerEntityManagerFactoryBean
.
class
).
getBootstrapExecutor
()).
isNull
());
}
@Test
void
bootstrapModeIsDefaultByDefault
()
{
this
.
contextRunner
.
withUserConfiguration
(
MultipleAsyncTaskExecutorConfiguration
.
class
)
.
withConfiguration
(
AutoConfigurations
.
of
(
TaskExecutionAutoConfiguration
.
class
,
TaskSchedulingAutoConfiguration
.
class
))
.
run
((
context
)
->
assertThat
(
context
.
getBean
(
LocalContainerEntityManagerFactoryBean
.
class
).
getBootstrapExecutor
()).
isNull
());
}
@Configuration
(
proxyBeanMethods
=
false
)
@EnableScheduling
@Import
(
TestConfiguration
.
class
)
static
class
MultipleAsyncTaskExecutorConfiguration
{
}
@Configuration
(
proxyBeanMethods
=
false
)
@Import
(
TestConfiguration
.
class
)
static
class
SingleAsyncTaskExecutorConfiguration
{
@Bean
SimpleAsyncTaskExecutor
testAsyncTaskExecutor
()
{
return
new
SimpleAsyncTaskExecutor
();
}
}
@Configuration
(
proxyBeanMethods
=
false
)
@TestAutoConfigurationPackage
(
City
.
class
)
static
class
TestConfiguration
{
}
@Configuration
(
proxyBeanMethods
=
false
)
@EnableJpaRepositories
(
basePackageClasses
=
org
.
springframework
.
boot
.
autoconfigure
.
data
.
alt
.
jpa
.
CityJpaRepository
.
class
,
excludeFilters
=
{
@Filter
(
type
=
FilterType
.
ASSIGNABLE_TYPE
,
value
=
CityMongoDbRepository
.
class
),
@Filter
(
type
=
FilterType
.
ASSIGNABLE_TYPE
,
value
=
CityElasticsearchDbRepository
.
class
)
})
@TestAutoConfigurationPackage
(
City
.
class
)
static
class
CustomConfiguration
{
}
@Configuration
(
proxyBeanMethods
=
false
)
// To not find any repositories
@EnableJpaRepositories
(
"foo.bar"
)
@TestAutoConfigurationPackage
(
City
.
class
)
static
class
SortOfInvalidCustomConfiguration
{
}
@Configuration
(
proxyBeanMethods
=
false
)
@TestAutoConfigurationPackage
(
Country
.
class
)
static
class
RevisionRepositoryConfiguration
{
}
}
spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/jpa/EnversRevisionRepositoriesAutoConfigurationTests.java
0 → 100644
View file @
91da8c9f
/*
* Copyright 2012-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
springframework
.
boot
.
autoconfigure
.
data
.
jpa
;
import
org.junit.jupiter.api.Test
;
import
org.springframework.boot.autoconfigure.data.jpa.country.CountryRepository
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
/**
* Tests for {@link JpaRepositoriesAutoConfiguration} with Spring Data Envers on the
* classpath.
*
* @author Stefano Cordio
*/
class
EnversRevisionRepositoriesAutoConfigurationTests
extends
AbstractJpaRepositoriesAutoConfigurationTests
{
@Test
void
autoConfigurationShouldSucceedWithRevisionRepository
()
{
this
.
contextRunner
.
withUserConfiguration
(
RevisionRepositoryConfiguration
.
class
)
.
run
((
context
)
->
assertThat
(
context
).
hasSingleBean
(
CountryRepository
.
class
));
}
}
spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/jpa/JpaRepositoriesAutoConfigurationTests.java
View file @
91da8c9f
/*
* Copyright 2012-202
1
the original author or authors.
* Copyright 2012-202
0
the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
...
...
@@ -16,164 +16,26 @@
package
org
.
springframework
.
boot
.
autoconfigure
.
data
.
jpa
;
import
javax.persistence.EntityManagerFactory
;
import
org.junit.jupiter.api.Test
;
import
org.springframework.boot.autoconfigure.AutoConfigurations
;
import
org.springframework.boot.autoconfigure.TestAutoConfigurationPackage
;
import
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration
;
import
org.springframework.boot.autoconfigure.data.alt.elasticsearch.CityElasticsearchDbRepository
;
import
org.springframework.boot.autoconfigure.data.alt.jpa.CityJpaRepository
;
import
org.springframework.boot.autoconfigure.data.alt.mongo.CityMongoDbRepository
;
import
org.springframework.boot.autoconfigure.data.jpa.city.City
;
import
org.springframework.boot.autoconfigure.data.jpa.city.CityRepository
;
import
org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration
;
import
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
;
import
org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration
;
import
org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration
;
import
org.springframework.boot.test.context.runner.ApplicationContextRunner
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.ComponentScan.Filter
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.FilterType
;
import
org.springframework.context.annotation.Import
;
import
org.springframework.core.task.SimpleAsyncTaskExecutor
;
import
org.springframework.data.jpa.repository.config.EnableJpaRepositories
;
import
org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean
;
import
org.springframework.scheduling.annotation.EnableScheduling
;
import
org.springframework.transaction.PlatformTransactionManager
;
import
org.springframework.beans.factory.BeanCreationException
;
import
org.springframework.boot.testsupport.classpath.ClassPathExclusions
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
/**
* Tests for {@link JpaRepositoriesAutoConfiguration}.
* Tests for {@link JpaRepositoriesAutoConfiguration} without Spring Data Envers on the
* classpath.
*
* @author Dave Syer
* @author Oliver Gierke
* @author Scott Frederick
* @author Stefano Cordio
*/
class
JpaRepositoriesAutoConfigurationTests
{
private
final
ApplicationContextRunner
contextRunner
=
new
ApplicationContextRunner
()
.
withConfiguration
(
AutoConfigurations
.
of
(
HibernateJpaAutoConfiguration
.
class
,
JpaRepositoriesAutoConfiguration
.
class
,
PropertyPlaceholderAutoConfiguration
.
class
))
.
withUserConfiguration
(
EmbeddedDataSourceConfiguration
.
class
);
@Test
void
testDefaultRepositoryConfiguration
()
{
this
.
contextRunner
.
withUserConfiguration
(
TestConfiguration
.
class
).
run
((
context
)
->
{
assertThat
(
context
).
hasSingleBean
(
CityRepository
.
class
);
assertThat
(
context
).
hasSingleBean
(
PlatformTransactionManager
.
class
);
assertThat
(
context
).
hasSingleBean
(
EntityManagerFactory
.
class
);
assertThat
(
context
.
getBean
(
LocalContainerEntityManagerFactoryBean
.
class
).
getBootstrapExecutor
()).
isNull
();
});
}
@Test
void
testOverrideRepositoryConfiguration
()
{
this
.
contextRunner
.
withUserConfiguration
(
CustomConfiguration
.
class
).
run
((
context
)
->
{
assertThat
(
context
).
hasSingleBean
(
CityJpaRepository
.
class
);
assertThat
(
context
).
hasSingleBean
(
PlatformTransactionManager
.
class
);
assertThat
(
context
).
hasSingleBean
(
EntityManagerFactory
.
class
);
});
}
@Test
void
autoConfigurationShouldNotKickInEvenIfManualConfigDidNotCreateAnyRepositories
()
{
this
.
contextRunner
.
withUserConfiguration
(
SortOfInvalidCustomConfiguration
.
class
)
.
run
((
context
)
->
assertThat
(
context
).
doesNotHaveBean
(
CityRepository
.
class
));
}
@Test
void
whenBootstrapModeIsLazyWithMultipleAsyncExecutorBootstrapExecutorIsConfigured
()
{
this
.
contextRunner
.
withUserConfiguration
(
MultipleAsyncTaskExecutorConfiguration
.
class
)
.
withConfiguration
(
AutoConfigurations
.
of
(
TaskExecutionAutoConfiguration
.
class
,
TaskSchedulingAutoConfiguration
.
class
))
.
withPropertyValues
(
"spring.data.jpa.repositories.bootstrap-mode=lazy"
)
.
run
((
context
)
->
assertThat
(
context
.
getBean
(
LocalContainerEntityManagerFactoryBean
.
class
).
getBootstrapExecutor
())
.
isEqualTo
(
context
.
getBean
(
"applicationTaskExecutor"
)));
}
@Test
void
whenBootstrapModeIsLazyWithSingleAsyncExecutorBootstrapExecutorIsConfigured
()
{
this
.
contextRunner
.
withUserConfiguration
(
SingleAsyncTaskExecutorConfiguration
.
class
)
.
withPropertyValues
(
"spring.data.jpa.repositories.bootstrap-mode=lazy"
)
.
run
((
context
)
->
assertThat
(
context
.
getBean
(
LocalContainerEntityManagerFactoryBean
.
class
).
getBootstrapExecutor
())
.
isEqualTo
(
context
.
getBean
(
"testAsyncTaskExecutor"
)));
}
@Test
void
whenBootstrapModeIsDeferredBootstrapExecutorIsConfigured
()
{
this
.
contextRunner
.
withUserConfiguration
(
MultipleAsyncTaskExecutorConfiguration
.
class
)
.
withConfiguration
(
AutoConfigurations
.
of
(
TaskExecutionAutoConfiguration
.
class
,
TaskSchedulingAutoConfiguration
.
class
))
.
withPropertyValues
(
"spring.data.jpa.repositories.bootstrap-mode=deferred"
)
.
run
((
context
)
->
assertThat
(
context
.
getBean
(
LocalContainerEntityManagerFactoryBean
.
class
).
getBootstrapExecutor
())
.
isEqualTo
(
context
.
getBean
(
"applicationTaskExecutor"
)));
}
@ClassPathExclusions
(
"spring-data-envers-*.jar"
)
class
JpaRepositoriesAutoConfigurationTests
extends
AbstractJpaRepositoriesAutoConfigurationTests
{
@Test
void
whenBootstrapModeIsDefaultBootstrapExecutorIsNotConfigured
()
{
this
.
contextRunner
.
withUserConfiguration
(
MultipleAsyncTaskExecutorConfiguration
.
class
)
.
withConfiguration
(
AutoConfigurations
.
of
(
TaskExecutionAutoConfiguration
.
class
,
TaskSchedulingAutoConfiguration
.
class
))
.
withPropertyValues
(
"spring.data.jpa.repositories.bootstrap-mode=default"
).
run
((
context
)
->
assertThat
(
context
.
getBean
(
LocalContainerEntityManagerFactoryBean
.
class
).
getBootstrapExecutor
()).
isNull
());
}
@Test
void
bootstrapModeIsDefaultByDefault
()
{
this
.
contextRunner
.
withUserConfiguration
(
MultipleAsyncTaskExecutorConfiguration
.
class
)
.
withConfiguration
(
AutoConfigurations
.
of
(
TaskExecutionAutoConfiguration
.
class
,
TaskSchedulingAutoConfiguration
.
class
))
.
run
((
context
)
->
assertThat
(
context
.
getBean
(
LocalContainerEntityManagerFactoryBean
.
class
).
getBootstrapExecutor
()).
isNull
());
}
@Configuration
(
proxyBeanMethods
=
false
)
@EnableScheduling
@Import
(
TestConfiguration
.
class
)
static
class
MultipleAsyncTaskExecutorConfiguration
{
}
@Configuration
(
proxyBeanMethods
=
false
)
@Import
(
TestConfiguration
.
class
)
static
class
SingleAsyncTaskExecutorConfiguration
{
@Bean
SimpleAsyncTaskExecutor
testAsyncTaskExecutor
()
{
return
new
SimpleAsyncTaskExecutor
();
}
}
@Configuration
(
proxyBeanMethods
=
false
)
@TestAutoConfigurationPackage
(
City
.
class
)
static
class
TestConfiguration
{
}
@Configuration
(
proxyBeanMethods
=
false
)
@EnableJpaRepositories
(
basePackageClasses
=
org
.
springframework
.
boot
.
autoconfigure
.
data
.
alt
.
jpa
.
CityJpaRepository
.
class
,
excludeFilters
=
{
@Filter
(
type
=
FilterType
.
ASSIGNABLE_TYPE
,
value
=
CityMongoDbRepository
.
class
),
@Filter
(
type
=
FilterType
.
ASSIGNABLE_TYPE
,
value
=
CityElasticsearchDbRepository
.
class
)
})
@TestAutoConfigurationPackage
(
City
.
class
)
static
class
CustomConfiguration
{
}
@Configuration
(
proxyBeanMethods
=
false
)
// To not find any repositories
@EnableJpaRepositories
(
"foo.bar"
)
@TestAutoConfigurationPackage
(
City
.
class
)
static
class
SortOfInvalidCustomConfiguration
{
void
autoConfigurationShouldFailWithRevisionRepository
()
{
this
.
contextRunner
.
withUserConfiguration
(
RevisionRepositoryConfiguration
.
class
)
.
run
((
context
)
->
assertThat
(
context
).
getFailure
().
isInstanceOf
(
BeanCreationException
.
class
));
}
}
spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/jpa/city/City.java
View file @
91da8c9f
/*
* Copyright 2012-20
19
the original author or authors.
* Copyright 2012-20
20
the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
...
...
spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/jpa/city/CityRepository.java
View file @
91da8c9f
/*
* Copyright 2012-20
19
the original author or authors.
* Copyright 2012-20
20
the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
...
...
spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/jpa/country/Country.java
0 → 100644
View file @
91da8c9f
/*
* Copyright 2012-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
springframework
.
boot
.
autoconfigure
.
data
.
jpa
.
country
;
import
java.io.Serializable
;
import
javax.persistence.Column
;
import
javax.persistence.Entity
;
import
javax.persistence.GeneratedValue
;
import
javax.persistence.Id
;
import
org.hibernate.envers.Audited
;
@Entity
public
class
Country
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@Id
@GeneratedValue
private
Long
id
;
@Audited
@Column
private
String
name
;
public
Long
getId
()
{
return
this
.
id
;
}
public
void
setId
(
Long
id
)
{
this
.
id
=
id
;
}
public
String
getName
()
{
return
this
.
name
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
}
spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/jpa/country/CountryRepository.java
0 → 100644
View file @
91da8c9f
/*
* Copyright 2012-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
springframework
.
boot
.
autoconfigure
.
data
.
jpa
.
country
;
import
org.springframework.data.jpa.repository.JpaRepository
;
import
org.springframework.data.repository.history.RevisionRepository
;
public
interface
CountryRepository
extends
JpaRepository
<
Country
,
Long
>,
RevisionRepository
<
Country
,
Long
,
Integer
>
{
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment