moved db initializer config properties to seperate class

This commit is contained in:
Rohan Sircar 2019-12-13 13:19:57 +05:30 committed by nova
parent 1ddb2bcd09
commit 5452a2d418
4 changed files with 39 additions and 35 deletions

View File

@ -4,28 +4,16 @@ import java.security.SecureRandom;
import org.modelmapper.ModelMapper;
import org.ros.chatto.security.AuthenticationSuccessHandlerImpl;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.security.core.token.KeyBasedPersistenceTokenService;
import org.springframework.security.core.token.TokenService;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
@PropertySource(value = "classpath:queries.properties")
@Configuration
public class BeanConfigurations {
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.username}")
private String userName;
@Value("${spring.datasource.password}")
private String password;
@Bean
public AuthenticationSuccessHandler authenticationSuccessHandler() {
return new AuthenticationSuccessHandlerImpl();

View File

@ -0,0 +1,29 @@
package org.ros.chatto.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import lombok.Getter;
@Component
@EnableConfigurationProperties
@PropertySource(value = "classpath:queries.properties")
@Getter
public class DBInitializerConfig {
private final String dbName;
private final String numTablesQuery;
private final String resetSessionsQuery;
public DBInitializerConfig(@Value("${database-name}") String dbName, @Value("${num-tables}") String numTablesQuery,
@Value("${reset-sessions}") String resetSessionsQuery) {
this.dbName = dbName;
this.numTablesQuery = numTablesQuery;
this.resetSessionsQuery = resetSessionsQuery;
}
}

View File

@ -14,7 +14,6 @@ import org.ros.chatto.repository.ChatMessageRepository;
import org.ros.chatto.repository.MessageCipherRepository;
import org.ros.chatto.repository.UserRepository;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

View File

@ -12,43 +12,31 @@ import javax.persistence.PersistenceContext;
import javax.transaction.Transactional;
import org.hibernate.Session;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.ros.chatto.config.DBInitializerConfig;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.event.EventListener;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.jdbc.datasource.init.ScriptUtils;
import org.springframework.stereotype.Service;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Service
@Slf4j
@PropertySource(value = "classpath:queries.properties")
@RequiredArgsConstructor
public class DBInitializerService {
@Value("${database-name}")
private String dbName;
@Value("${num-tables}")
private String numTablesQuery;
@Value("${reset-sessions}")
private String resetSessionsQuery;
private final Logger logger = LoggerFactory.getLogger(DBInitializerService.class);
private final DBInitializerConfig dbInitializerConfig;
@PersistenceContext
private EntityManager entityManager;
public int getNumTables(final Connection connection) throws SQLException {
final PreparedStatement preparedStatement = connection.prepareStatement(numTablesQuery);
preparedStatement.setString(1, dbName);
final PreparedStatement preparedStatement = connection.prepareStatement(dbInitializerConfig.getNumTablesQuery());
preparedStatement.setString(1, dbInitializerConfig.getDbName());
final ResultSet resultSet = preparedStatement.executeQuery();
resultSet.next();
final int numTables = resultSet.getInt("num_tables");
@ -58,13 +46,13 @@ public class DBInitializerService {
@EventListener(ApplicationReadyEvent.class)
@Transactional
public void doSomethingAfterStartup() throws SQLException, IOException {
logger.info("Application Started - running initializer service");
log.info("Application Started - running initializer service");
final Session session = entityManager.unwrap(Session.class);
session.doWork(connection -> {
if (getNumTables(connection) == 0) {
logger.info("Database is empty. Populating tables and roles");
log.info("Database is empty. Populating tables and roles");
try {
populateDB(connection);
} catch (final IOException e) {
@ -74,7 +62,7 @@ public class DBInitializerService {
});
session.doWork(connection -> {
logger.info("Resetting all user sessions");
log.info("Resetting all user sessions");
resetAllUserSessions(connection);
});
}
@ -88,7 +76,7 @@ public class DBInitializerService {
}
private void resetAllUserSessions(final Connection connection) throws SQLException {
final PreparedStatement preparedStatement = connection.prepareStatement(resetSessionsQuery);
final PreparedStatement preparedStatement = connection.prepareStatement(dbInitializerConfig.getResetSessionsQuery());
preparedStatement.executeUpdate();
}