db init service now uses hibernate connection instead of separate connection. Also, user sessions are now reset using jdbc as well
This commit is contained in:
parent
bee90dcef0
commit
0ecfda9980
@ -12,6 +12,11 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
import javax.persistence.PersistenceContext;
|
||||
import javax.transaction.Transactional;
|
||||
|
||||
import org.hibernate.Session;
|
||||
import org.ros.chatto.model.ApplicationStatus;
|
||||
import org.ros.chatto.model.UserSession;
|
||||
import org.ros.chatto.repository.UserSessionRepository;
|
||||
@ -57,6 +62,8 @@ public class DBInitializerService {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(DBInitializerService.class);
|
||||
|
||||
@PersistenceContext
|
||||
private EntityManager entityManager;
|
||||
|
||||
public void connectDB() throws SQLException {
|
||||
connection = DriverManager.getConnection(url, userName, password);
|
||||
@ -77,26 +84,67 @@ public class DBInitializerService {
|
||||
return numTables;
|
||||
}
|
||||
|
||||
public int getNumTables(Connection connection) throws SQLException {
|
||||
PreparedStatement preparedStatement = connection.prepareStatement(numTablesQuery);
|
||||
// preparedStatement.get
|
||||
preparedStatement.setString(1, dbName);
|
||||
ResultSet resultSet = preparedStatement.executeQuery();
|
||||
// while(resultSet.next())
|
||||
// {
|
||||
// System.out.println(resultSet.get);
|
||||
// }
|
||||
resultSet.next();
|
||||
int numTables = resultSet.getInt("num_tables");
|
||||
// System.out.println(numTables);
|
||||
return numTables;
|
||||
}
|
||||
|
||||
@EventListener(ApplicationReadyEvent.class)
|
||||
@Transactional
|
||||
public void doSomethingAfterStartup() throws SQLException, IOException {
|
||||
// setProperties();
|
||||
|
||||
connectDB();
|
||||
// connectDB();
|
||||
|
||||
logger.info("Application Started - running initializer service");
|
||||
// System.out.println("Checking database and application state");
|
||||
//
|
||||
|
||||
if (getNumTables() == 0) {
|
||||
Session session = entityManager.unwrap(Session.class);
|
||||
|
||||
session.doWork(connection -> {
|
||||
if (getNumTables(connection) == 0) {
|
||||
logger.info("Database is empty. Populating tables and roles");
|
||||
populateDB();
|
||||
try {
|
||||
populateDB(connection);
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
closeConnection();
|
||||
}
|
||||
});
|
||||
|
||||
// if (getNumTables() == 0) {
|
||||
// logger.info("Database is empty. Populating tables and roles");
|
||||
// populateDB();
|
||||
// }
|
||||
// closeConnection();
|
||||
|
||||
session.doWork(connection -> {
|
||||
resetAllUserSessions(connection);
|
||||
});
|
||||
|
||||
resetAllUserSessions(userSessionRepository.findAll());
|
||||
}
|
||||
|
||||
public void populateDB() throws SQLException, IOException {
|
||||
private void populateDB() throws SQLException, IOException {
|
||||
ScriptUtils.executeSqlScript(connection,
|
||||
new EncodedResource(new ClassPathResource("scheme.sql"), StandardCharsets.UTF_8));
|
||||
ScriptUtils.executeSqlScript(connection,
|
||||
new EncodedResource(new ClassPathResource("datae.sql"), StandardCharsets.UTF_8));
|
||||
|
||||
}
|
||||
|
||||
private void populateDB(Connection connection) throws SQLException, IOException {
|
||||
ScriptUtils.executeSqlScript(connection,
|
||||
new EncodedResource(new ClassPathResource("scheme.sql"), StandardCharsets.UTF_8));
|
||||
ScriptUtils.executeSqlScript(connection,
|
||||
@ -114,7 +162,6 @@ public class DBInitializerService {
|
||||
new EncodedResource(new ClassPathResource("datae.sql"), StandardCharsets.UTF_8));
|
||||
}
|
||||
|
||||
|
||||
Map<String, Boolean> listToMap(List<ApplicationStatus> applicationStatusList) {
|
||||
Map<String, Boolean> statusMap = new HashMap<>();
|
||||
for (ApplicationStatus applicationStatus : applicationStatusList) {
|
||||
@ -136,4 +183,13 @@ public class DBInitializerService {
|
||||
userSessionRepository.saveAll(userSessionsResetList);
|
||||
}
|
||||
|
||||
private void resetAllUserSessions(Connection connection) throws SQLException
|
||||
{
|
||||
String sql = "update user_sessions set online=0, num_sessions=0";
|
||||
|
||||
PreparedStatement preparedStatement = connection.prepareStatement(sql);
|
||||
|
||||
preparedStatement.executeUpdate();
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user