Используя подход TDD, я работал над попыткой заставить работать следующий метод TestNG:
@Test
@Slf4j
@SpringBootTest
class PostgresSanityTesting extends AbstractTestNGSpringContextTests{
@Autowired
DatabaseClient databaseClient
void sanityCheck() {
assert databaseClient
}
Но чтобы добраться, есть какая-то работа ...
Во-первых, яЯ не вижу никакого эффективного кода, пока я не заставлю свой подпроект gradle строить с
ext['spring.version'] = '5.2.0.M2'
, который фактически вызывается в документации R2Dbc .И половина других зависимостей проистекает из весенних экспериментов и вех.Так что «покупатель остерегается» ... (например, я до сих пор не вижу, как R2dbc правильно обрабатывает сохранение в репозитории () и ряд других проблем.)
Что касается проблемы мгновенного кодирования:
При правильной настройке клиент базы данных является @Bean, настроенным как часть класса AbstractR2dbcConfiguration, и затем этот тест TestNg пройдет.
Но я обнаружил, что мне все еще нужно создать @Bean, и я внедряю параметры фабрики соединений через @ConfigurationProperties.Я разделяю эти проблемы в двух файлах, так как размещение @Bean с подклассом AbstractR2dbcConfiguration просто не работает для меня.
Вот код, который я использую, выраженный в groovy.
import io.r2dbc.spi.ConnectionFactory
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.Profile
import org.springframework.data.r2dbc.config.AbstractR2dbcConfiguration
import org.springframework.data.r2dbc.repository.config.EnableR2dbcRepositories
@Configuration
class R2DbcConfiguration extends AbstractR2dbcConfiguration {
private final ConnectionFactory connectionFactory
R2DbcConfiguration( ConnectionFactory connectionFactory ) {
this.connectionFactory = connectionFactory
}
@Override
ConnectionFactory connectionFactory() {
this.connectionFactory
}
}
и
import io.r2dbc.postgresql.PostgresqlConnectionConfiguration
import io.r2dbc.postgresql.PostgresqlConnectionFactory
import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.Profile
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "spring.datasource")
class PostgresConnectionConfig{
String database
String username
String password
String host
String port
@Bean
PostgresqlConnectionFactory connectionFactory() {
final def dbPort = port as Integer
PostgresqlConnectionConfiguration config = PostgresqlConnectionConfiguration.builder() //
.host(host)
.port(dbPort)
.database(database)
.username(username)
.password(password).build()
PostgresqlConnectionFactory candidate = new PostgresqlConnectionFactory(config)
candidate
}
}
и часть моего application.yml
spring:
datasource:
url: jdbc:postgresql://127.0.0.1:5432/postgres
driver-class-name: org.postgresql.Driver
driverClassName: org.postgresql.Driver
database: postgres
host: localhost
port: 5432
password: pokey0
username: postgres
и выдержки из build.gradle моего подпроекта
repositories {
maven { url "https://repo.spring.io/libs-milestone" }
}
dependencies {
implementation group: 'org.springframework.data', name: 'spring-data-releasetrain', version: 'Lovelace-RELEASE', ext: 'pom'
implementation group: 'org.springframework.data', name: 'spring-data-r2dbc', version: '1.0.0.M2'
implementation group: 'io.r2dbc', name: 'r2dbc-postgresql', version: '1.0.0.M7'
implementation('org.springframework.boot:spring-boot-starter-webflux')
implementation('io.projectreactor:reactor-test')
implementation group: 'org.postgresql', name: 'postgresql', version: '42.2.5'
implementation('org.springframework.boot:spring-boot-starter-actuator')
testImplementation('org.springframework.boot:spring-boot-starter-test')
implementation group: 'javax.persistence', name: 'javax.persistence-api', version: '2.2'
}