Se dice en el artículo de Spring javadoc sobre la clase DriverManagerDataSource
, que esta clase es muy simple y que se recomienda
utilizar un JNDI DataSource proporcionado por el contenedor. Tal
DataSource
puede exponerse como un beanDataSource
en Spring ApplicationContext a través deJndiObjectFactoryBean
- Asignación de un servlet específico para ser el servlet predeterminado en Tomcat
- Tomcat comenzó en Eclipse pero no pudo conectarse a http: // localhost: 8085 /
- ¿Hay un motor de reescritura de URL para Tomcat / Java?
- Tomcat 8 no puede gestionar la solicitud de obtención con '|' en los parámetros de consulta?
- El valor para el atributo de clase useBean ... no es válido
La pregunta es: ¿cómo lograr esto?
Por ejemplo, si deseo tener DataSource bean para acceder a mi base de datos custo mysql, ¿qué necesito entonces? ¿Qué escribir en la configuración de contexto, etc.?
Si usa la configuración basada en el esquema XML de Spring, configúrela en el contexto de Spring de esta manera:
...
Alternativamente, configure usando una configuración simple de bean como esta:
Puede declarar el recurso JNDI en server.xml de tomcat usando algo como esto:
Y haga referencia al recurso JNDI desde el contexto web de Tomcat.xml de la siguiente manera:
Documentación de referencia:
Editar: Esta respuesta se ha actualizado para Tomcat 8 y Spring 4. Se han realizado algunos cambios en el nombre de la propiedad para la configuración del grupo de recursos de origen de datos predeterminado de Tomcat.
Con el mecanismo JavaConfig de Spring, puedes hacerlo así:
@Configuration public class MainConfig { ... @Bean DataSource dataSource() { DataSource dataSource = null; JndiTemplate jndi = new JndiTemplate(); try { dataSource = jndi.lookup("java:comp/env/jdbc/yourname", DataSource.class); } catch (NamingException e) { logger.error("NamingException for java:comp/env/jdbc/yourname", e); } return dataSource; } }
Suponiendo que tiene una definición de fuente de datos “sampleDS” dentro de su configuración de tomcat, puede agregar las siguientes líneas a su applicationContext.xml
para acceder a la fuente de datos usando JNDI.
jee
definir el espacio de nombre y la ubicación del esquema para el prefijo jee
usando:
xmlns:jee="http://www.springframework.org/schema/jee" xsi:schemaLocation="http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd"
Documentación: C.2.3.1
(simple)
Ejemplo:
Solo necesita averiguar a qué nombre JNDI ha vinculado su servidor de aplicaciones la fuente de datos. Esto es completamente específico del servidor, consulte los documentos en su servidor para averiguar cómo.
Recuerde declarar el espacio de nombres jee
en la parte superior del archivo beans, como se describe en C.2.3. El esquema jee .
Otra característica: en lugar de server.xml, puede agregar la etiqueta “Recurso” en
your_application / META-INF / Context.xml (según tomcat docs ) como este:
Según Apache Tomcat 7 JNDI Datasource HOW-TO página debe haber una configuración de recursos en web.xml:
DB Connection jdbc/TestDB javax.sql.DataSource Container
Funciona para mi
En tu clase de spring, puedes inyectar un bean anotado como
@Autowired @Qualifier("dbDataSource") private DataSource dataSource;
y Usted agrega esto en su contexto.xml
Puede declarar el recurso JNDI en server.xml de tomcat
volver a context.xml de spring agregar esto
Si, como este ejemplo, está inyectando conexión a la base de datos, asegúrese de que MySQL jar esté presente en el directorio lib de tomcat, de lo contrario, tomcat no podrá crear el conjunto de conexiones de la base de datos MySQL.
Encontré esta solución muy útil de una manera limpia para eliminar por completo la configuración xml.
Verifique esta configuración db utilizando JNDI y Spring framework. http://www.unotions.com/design/how-to-create-oracleothersql-db-configuration-using-spring-and-maven/