Tengo dos formas de crear una fuente de datos:
Dentro del contexto primaveral
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mkyongjava" /> <property name="username" value="root" /> <property name="password" value="password" />
Tomcat JNDI
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:comp/env/jdbc/UsersDB"/>
¿Cuáles son los beneficios y los problemas de crear la fuente de datos usando spring o usando tomcat jndi?
El primer enfoque, utilizando la clase DriverManagerDataSource, es útil para entornos de prueba o independientes fuera del contenedor j2ee.
Se recomienda utilizar el segundo enfoque, que utiliza la fuente de datos jndi, en el contenedor j2ee.
La siguiente referencia establece claramente estos enfoques.
No hay nada como una buena práctica entre esto. El bueno es el que es bueno para el caso de uso. Ambos tienen pros y contras.
Cuando tiene casos de uso en los que intenta implementar las aplicaciones en un entorno de servidor donde varias aplicaciones comparten una fuente de datos común o los componentes de la fuente de datos son administrados por la administración del servidor, entonces probablemente la mejor manera de usar es a través de un contexto JNDI. El servidor tiene el origen de datos preparado para que la aplicación pueda obtener directamente ese objeto, vincularse a sí mismo y utilizar el origen de datos.
Cuando tiene un caso de uso en el que la aplicación se ejecuta dentro de un contenedor de servidor integrado o contenedores en la nube donde el servidor también está integrado a lo largo de los paquetes de compilación, crear una fuente de datos en la aplicación y usarlos sería una buena solución. También en entornos de aplicaciones que no sean web, sería bueno crear una fuente de datos.
Para resumir, los casos de uso en los que la aplicación no administra la fuente de datos es mejor optar por un contexto JNDI.
Intente averiguar cuál es el modelo de implementación de su aplicación y descubra qué es bueno para usted. También intente usar implementaciones de datasourcepool para mejorar el rendimiento como DBCP, C3P0 o Hikarcp.
Lo estoy usando como se muestra a continuación. Funciona para mí ya que el proyecto se configura en el momento del diseño de la arquitectura. Y su producción en vivo.
<!-- Local Apache Commons DBCP DataSource that refers to a combined database --> <!-- (see dataAccessContext-jta.xml for an alternative) --> <!-- The placeholders are resolved from jdbc.properties through --> <!-- the PropertyPlaceholderConfigurer in applicationContext.xml --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="validationQuery" value="${jdbc.validationquery}"/> <property name="testOnBorrow" value="${jdbc.testonborrow}"/> <property name="driverClassName" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!-- Transaction manager for a single JDBC DataSource --> <!-- (see dataAccessContext-jta.xml for an alternative) --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean>
también puedes referirte a esto. La mejor contribución de Genious a los desarrolladores de Java.
https://www.mkyong.com/spring-boot/spring-boot-jdbc-oracle-database-commons-dbcp2-example/