title: Spring boot jdbc Connection
body: <p>i'm trying to configure spring boot in order to have tomcat connection pool to my production database.
  My application is NOT web (i have also some difficult to tell that to spring).</p>
  
  <p>I have a Startup class and 3 more classes</p>
  
  <p><strong>the code</strong></p>
  
  <pre><code>@Configuration
  
  @EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)
  
  public class Starter {
  
  private static Logger logger;
  
  @Autowired
  private static MyController controller;
  
  public static void main(String[] args) {
  
  //      SpringApplication.setWebEnvironment(false);
  
      SpringApplication.run(Starter.class, args);
  
      LogbackConfigLoader lcl = new LogbackConfigLoader();
      if (lcl.init()) {
          logger = LoggerFactory.getLogger(Starter.class);
          logger.debug("Initialized....");
      }
      else{
          logger = LoggerFactory.getLogger(Starter.class);
      }
  
  
      logger.info(controller.getProva());
  
  }
  
  
  }
  </code></pre>
  
  <p>here is the configuration 
  `</p>
  
  <pre><code>@Configuration
  
  @ConfigurationProperties(prefix="datasource.NIS")
  
  public class NISDBConfiguration {
  
  private String jdbcInterceptors;
  private long validationInterval = 30000;
  
  private org.apache.tomcat.jdbc.pool.DataSource pool;
  
  @Value("${driver-class-name}")
  private String driverClassName;
  
  @Value("${url}")
  private String url;
  
  @Value("${username}")
  private String username;
  
  @Value("${password}")
  private String password;
  
  @Value("${maxActive}")
  private int maxActive = 30;
  
  @Value("${maxIdle}")
  private int maxIdle = 8;
  
  @Value("${minIdle}")
  private int minIdle = 8;
  
  @Value("${initialSize}")
  private int initialSize = 10;
  
  private String validationQuery;
  
  private boolean testOnBorrow;
  
  private boolean testOnReturn;
  
  private boolean testWhileIdle;
  
  private Integer timeBetweenEvictionRunsMillis;
  
  private Integer minEvictableIdleTimeMillis;
  
  private Integer maxWaitMillis;
  
  public String getJdbcInterceptors() {
      return jdbcInterceptors;
  }
  
  public void setJdbcInterceptors(String jdbcInterceptors) {
      this.jdbcInterceptors = jdbcInterceptors;
  }
  
  public long getValidationInterval() {
      return validationInterval;
  }
  
  public void setValidationInterval(long validationInterval) {
      this.validationInterval = validationInterval;
  }
  
  public org.apache.tomcat.jdbc.pool.DataSource getPool() {
      return pool;
  }
  
  public void setPool(org.apache.tomcat.jdbc.pool.DataSource pool) {
      this.pool = pool;
  }
  
  public String getDriverClassName() {
      return driverClassName;
  }
  
  public void setDriverClassName(String driverClassName) {
      this.driverClassName = driverClassName;
  }
  
  public String getUrl() {
      return url;
  }
  
  public void setUrl(String url) {
      this.url = url;
  }
  
  public String getUsername() {
      return username;
  }
  
  public void setUsername(String username) {
      this.username = username;
  }
  
  public String getPassword() {
      return password;
  }
  
  public void setPassword(String password) {
      this.password = password;
  }
  
  public int getMaxActive() {
      return maxActive;
  }
  
  public void setMaxActive(int maxActive) {
      this.maxActive = maxActive;
  }
  
  public int getMaxIdle() {
      return maxIdle;
  }
  
  public void setMaxIdle(int maxIdle) {
      this.maxIdle = maxIdle;
  }
  
  public int getMinIdle() {
      return minIdle;
  }
  
  public void setMinIdle(int minIdle) {
      this.minIdle = minIdle;
  }
  
  public int getInitialSize() {
      return initialSize;
  }
  
  public void setInitialSize(int initialSize) {
      this.initialSize = initialSize;
  }
  
  public String getValidationQuery() {
      return validationQuery;
  }
  
  public void setValidationQuery(String validationQuery) {
      this.validationQuery = validationQuery;
  }
  
  public boolean isTestOnBorrow() {
      return testOnBorrow;
  }
  
  public void setTestOnBorrow(boolean testOnBorrow) {
      this.testOnBorrow = testOnBorrow;
  }
  
  public boolean isTestOnReturn() {
      return testOnReturn;
  }
  
  public void setTestOnReturn(boolean testOnReturn) {
      this.testOnReturn = testOnReturn;
  }
  
  public boolean isTestWhileIdle() {
      return testWhileIdle;
  }
  
  public void setTestWhileIdle(boolean testWhileIdle) {
      this.testWhileIdle = testWhileIdle;
  }
  
  public Integer getTimeBetweenEvictionRunsMillis() {
      return timeBetweenEvictionRunsMillis;
  }
  
  public void setTimeBetweenEvictionRunsMillis(
          Integer timeBetweenEvictionRunsMillis) {
      this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
  }
  
  public Integer getMinEvictableIdleTimeMillis() {
      return minEvictableIdleTimeMillis;
  }
  
  public void setMinEvictableIdleTimeMillis(Integer minEvictableIdleTimeMillis) {
      this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
  }
  
  public Integer getMaxWaitMillis() {
      return maxWaitMillis;
  }
  
  public void setMaxWaitMillis(Integer maxWaitMillis) {
      this.maxWaitMillis = maxWaitMillis;
  } 
  
  @Bean(name = "dsNIS") 
  public DataSource dataSource() { 
      this.pool = new org.apache.tomcat.jdbc.pool.DataSource();
      this.pool.setDriverClassName(getDriverClassName());
      this.pool.setUrl(getUrl());
      this.pool.setUsername(getUsername());
      this.pool.setPassword(getPassword());
      this.pool.setInitialSize(getInitialSize());
      this.pool.setMaxActive(getMaxActive());
      this.pool.setMaxIdle(getMaxIdle());
      this.pool.setMinIdle(getMinIdle());
      this.pool.setTestOnBorrow(isTestOnBorrow());
      this.pool.setTestOnReturn(isTestOnReturn());
      this.pool.setTestWhileIdle(isTestWhileIdle());
  
      if (getTimeBetweenEvictionRunsMillis() != null) {
          this.pool
                  .setTimeBetweenEvictionRunsMillis(getTimeBetweenEvictionRunsMillis());
      }
      if (getMinEvictableIdleTimeMillis() != null) {
          this.pool.setMinEvictableIdleTimeMillis(getMinEvictableIdleTimeMillis());
      }
      this.pool.setValidationQuery(getValidationQuery());
      this.pool.setValidationInterval(this.validationInterval);
      if (getMaxWaitMillis() != null) {
          this.pool.setMaxWait(getMaxWaitMillis());
      }
      if (this.jdbcInterceptors != null) {
          this.pool.setJdbcInterceptors(this.jdbcInterceptors);
      }
      return this.pool;
  
  } 
  
  @PreDestroy
  public void close() {
      if (this.pool != null) {
          this.pool.close();
      }
  }
  
  @Bean(name = "jdbcNIS") 
  public JdbcTemplate jdbcTemplate(DataSource dsNIS) { 
      return new JdbcTemplate(dsNIS); 
  }
  </code></pre>
  
  <p>}
  `</p>
  
  <p><strong>the repository</strong></p>
  
  <pre><code>package org.hp.data;
  
  @Repository
  
  public class NisRepository {
  
  protected final Logger log = LoggerFactory.getLogger(getClass()); 
  
  
  @Autowired 
  @Qualifier("jdbcNIS") 
  protected JdbcTemplate jdbc; 
  
  
  public String getItem(long id) { 
      return jdbc.queryForObject("SELECT * FROM sb_item WHERE id=?", itemMapper, id); 
  } 
  
  private static final RowMapper&lt;String&gt; itemMapper = new RowMapper&lt;String&gt;() {
      @Override
      public String mapRow(ResultSet rs, int rowNum) throws SQLException { 
          String item = rs.getString("title"); 
          return item; 
      } 
  };
  
  
  public JdbcTemplate getJdbc() {
      return jdbc;
  }
  
  public void setJdbc(JdbcTemplate jdbc) {
      this.jdbc = jdbc;
  } 
  </code></pre>
  
  <p>}</p>
  
  <p><strong>the controller</strong></p>
  
  <pre><code>@Controller
  public class MyController {
  
  
  @Autowired 
  private NisRepository items; 
  
  public NisRepository getItems() {
      return items;
  }
  
  public void setItems(NisRepository items) {
      this.items = items;
  }
  
  public String getProva(){
      return items.getItem(10);
  }
  </code></pre>
  
  <p>}</p>
  
  <p>But i always get exception when running the application of NullPointerException because MyController is not autowired and is always null.</p>
  
  <p>I also try to create a new instance with new (but i believe that this is not correct because of the spring mvc pattern).</p>
  
  <p>What is the problem here?</p>
  
  <p>Thanks in advance</p>