Subversion Repositories SmartDukaan

Rev

Rev 34690 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 34690 Rev 35393
Line 13... Line 13...
13
import com.google.gson.GsonBuilder;
13
import com.google.gson.GsonBuilder;
14
import com.spice.profitmandi.dao.convertor.LocalDateJsonConverter;
14
import com.spice.profitmandi.dao.convertor.LocalDateJsonConverter;
15
import com.spice.profitmandi.dao.convertor.LocalDateTimeJsonConverter;
15
import com.spice.profitmandi.dao.convertor.LocalDateTimeJsonConverter;
16
import com.spice.profitmandi.dao.repository.dtr.Mongo;
16
import com.spice.profitmandi.dao.repository.dtr.Mongo;
17
 
17
 
-
 
18
import com.mysql.cj.jdbc.AbandonedConnectionCleanupThread;
18
import com.zaxxer.hikari.HikariConfig;
19
import com.zaxxer.hikari.HikariConfig;
19
import com.zaxxer.hikari.HikariDataSource;
20
import com.zaxxer.hikari.HikariDataSource;
20
import org.apache.logging.log4j.LogManager;
21
import org.apache.logging.log4j.LogManager;
21
import org.apache.logging.log4j.Logger;
22
import org.apache.logging.log4j.Logger;
22
import org.hibernate.SessionFactory;
23
import org.hibernate.SessionFactory;
Line 27... Line 28...
27
import org.springframework.jdbc.datasource.DriverManagerDataSource;
28
import org.springframework.jdbc.datasource.DriverManagerDataSource;
28
import org.springframework.orm.hibernate5.HibernateTransactionManager;
29
import org.springframework.orm.hibernate5.HibernateTransactionManager;
29
import org.springframework.orm.hibernate5.LocalSessionFactoryBuilder;
30
import org.springframework.orm.hibernate5.LocalSessionFactoryBuilder;
30
import org.springframework.transaction.annotation.EnableTransactionManagement;
31
import org.springframework.transaction.annotation.EnableTransactionManagement;
31
 
32
 
-
 
33
import javax.annotation.PreDestroy;
32
import javax.sql.DataSource;
34
import javax.sql.DataSource;
-
 
35
import java.sql.Driver;
-
 
36
import java.sql.DriverManager;
-
 
37
import java.sql.SQLException;
33
import java.time.LocalDate;
38
import java.time.LocalDate;
34
import java.time.LocalDateTime;
39
import java.time.LocalDateTime;
35
import java.time.format.DateTimeFormatter;
40
import java.time.format.DateTimeFormatter;
36
import java.time.format.DateTimeFormatterBuilder;
41
import java.time.format.DateTimeFormatterBuilder;
-
 
42
import java.util.Enumeration;
37
import java.util.Properties;
43
import java.util.Properties;
38
 
44
 
39
@Configuration
45
@Configuration
40
@EnableTransactionManagement
46
@EnableTransactionManagement
41
@ComponentScan("com.spice.profitmandi.*")
47
@ComponentScan("com.spice.profitmandi.*")
42
@PropertySource("classpath:META-INF/env.properties")
48
@PropertySource(value = {"classpath:shared-dev.properties", "classpath:META-INF/env.properties"}, ignoreResourceNotFound = true)
43
public class DBConfig {
49
public class DBConfig {
44
 
50
 
45
	private static final Logger LOGGER = LogManager.getLogger(DBConfig.class);
51
	private static final Logger LOGGER = LogManager.getLogger(DBConfig.class);
46
 
52
 
47
	// Hibernate Property Keys
53
	// Hibernate Property Keys
Line 95... Line 101...
95
 
101
 
96
	/**
102
	/**
97
	 * Primary DataSource using DriverManager (can be replaced with HikariDataSource)
103
	 * Primary DataSource using DriverManager (can be replaced with HikariDataSource)
98
	 */
104
	 */
99
	@Primary
105
	@Primary
100
	@Bean(name = "dataSource")
106
	@Bean(name = "dataSource", destroyMethod = "close")
101
	public DataSource dataSource() {
107
	public HikariDataSource dataSource() {
102
		HikariConfig config = new HikariConfig();
108
		HikariConfig config = new HikariConfig();
103
		config.setDriverClassName(hibernateDriverClass);
109
		config.setDriverClassName(hibernateDriverClass);
104
		config.setJdbcUrl(hibernateUrl);
110
		config.setJdbcUrl(hibernateUrl);
105
		config.setUsername(hibernateUserName);
111
		config.setUsername(hibernateUserName);
106
		config.setPassword(hibernatePassword);
112
		config.setPassword(hibernatePassword);
Line 198... Line 204...
198
	}
204
	}
199
 
205
 
200
	/**
206
	/**
201
	 * Mongo Client Bean
207
	 * Mongo Client Bean
202
	 */
208
	 */
203
	@Bean
209
	@Bean(destroyMethod = "close")
204
	public Mongo mongoClient(SessionFactory sessionFactory) {
210
	public Mongo mongoClient(SessionFactory sessionFactory) {
205
		return new Mongo(mongoHost, contentMongoHost);
211
		return new Mongo(mongoHost, contentMongoHost);
206
	}
212
	}
207
 
213
 
208
	/**
214
	/**
Line 216... Line 222...
216
				.registerTypeAdapter(LocalDateTime.class, new LocalDateTimeJsonConverter())
222
				.registerTypeAdapter(LocalDateTime.class, new LocalDateTimeJsonConverter())
217
				.create();
223
				.create();
218
		LOGGER.info("Gson configured");
224
		LOGGER.info("Gson configured");
219
		return gson;
225
		return gson;
220
	}
226
	}
-
 
227
 
-
 
228
	/**
-
 
229
	 * Cleanup method to prevent memory leaks on shutdown.
-
 
230
	 * Deregisters JDBC drivers and stops MySQL cleanup thread.
-
 
231
	 */
-
 
232
	@PreDestroy
-
 
233
	public void cleanup() {
-
 
234
		LOGGER.info("DBConfig cleanup started...");
-
 
235
 
-
 
236
		// Stop MySQL AbandonedConnectionCleanupThread
-
 
237
		try {
-
 
238
			AbandonedConnectionCleanupThread.checkedShutdown();
-
 
239
			LOGGER.info("MySQL AbandonedConnectionCleanupThread stopped");
-
 
240
		} catch (Exception e) {
-
 
241
			LOGGER.error("Error stopping MySQL cleanup thread", e);
-
 
242
		}
-
 
243
 
-
 
244
		// Deregister JDBC drivers loaded by this webapp's classloader
-
 
245
		ClassLoader cl = Thread.currentThread().getContextClassLoader();
-
 
246
		Enumeration<Driver> drivers = DriverManager.getDrivers();
-
 
247
		while (drivers.hasMoreElements()) {
-
 
248
			Driver driver = drivers.nextElement();
-
 
249
			if (driver.getClass().getClassLoader() == cl) {
-
 
250
				try {
-
 
251
					DriverManager.deregisterDriver(driver);
-
 
252
					LOGGER.info("Deregistered JDBC driver: {}", driver);
-
 
253
				} catch (SQLException e) {
-
 
254
					LOGGER.error("Error deregistering JDBC driver {}", driver, e);
-
 
255
				}
-
 
256
			}
-
 
257
		}
-
 
258
 
-
 
259
		LOGGER.info("DBConfig cleanup completed");
-
 
260
	}
221
}
261
}