使用Springboot和JPA实现JNDI

pinkon5k  于 2022-11-29  发布在  Spring
关注(0)|答案(1)|浏览(239)

我试着在Tomcat中配置JNDI。我试着用2个springboot应用程序。

  • 第一个应用程序是使用springboot starter jdbc。
  • 二是使用springboot启动器jpa。

两种应用程序的控制器相同:

@RequestMapping(
        value = "/employees",
        method = RequestMethod.GET)
public ResponseEntity<Object> getEmployees() {
    System.out.println("inside  getEmployees() method ....");
    List<Employee> employeeList = repository.findAll();
    return new ResponseEntity<>(employeeList, HttpStatus.OK);
}

我还在应用程序属性中配置了jndi:

spring.datasource.jndi-name=java:comp/env/jdbc/TestDB

在使用springboot starter jdbc的应用程序的存储库类中:

@Repository
public class EmployeeRepository {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Transactional(readOnly = true)
    public List<Employee> findAll() {
        return jdbcTemplate.query("select * from EMPLOYEE", new EmployeeRowMapper());
    }
}

另一方面,我使用JpaRepository:

@Repository
public interface EmployeeRepository extends JpaRepository<EmployeeEntity, Long> {
    @Override
    @Transactional(readOnly = true)
    List<EmployeeEntity> findAll();
}

到目前为止一切顺利。server.xml和context.xml在tomcat中配置正确。对于这个测试,我使用的是MySQL v.5...包含springboot starter jdbc的应用程序,我使用get方法访问数据库数据。在另一个应用程序中,war已部署但未启动。
我有三个问题:
1.我尝试使用JNDI来处理连接池
1.我的大部分开发都使用JPA(我的应用程序有很多Web服务...)
1.最后一个问题应该是一个新问题:有没有办法从外部应用程序使用Tomcat连接池到数据库?例如,让一个jar使用相同的连接池。对于这一点,我没有找到任何示例

thtygnil

thtygnil1#

我通过以下操作解决了此问题:我创建了配置类

@Configuration
@EnableJpaRepositories(basePackages = "fr.company.jndi.data.repository")
public class Config {
    @Bean
    public DataSource dataSource() {
        DataSource dataSource = null;

        Context ctx = null;
        try {
            ctx = new InitialContext();
            dataSource = (DataSource) ctx.lookup("java:comp/env/jdbc/TestDB");
        } catch (NamingException e) {
            e.printStackTrace();
        }
        return dataSource;
    }
}

我还将我的Spring Boot版本从3.0.0版降级到2.7.4版--例如SNAPSHOT。我还添加了以下依赖项:

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
</dependency>

相关问题