Ajuda iniciante em spring boot

17 respostas
java
M

alterei o nome do meu projeto que estou estudando spring boot e agora ele nao consegue inicalizar, da o seguinte erro

Error starting ApplicationContext. To display the auto-configuration report re-run your application with ‘debug’ enabled.
2018-04-17 10:42:09.012 ERROR 10800 — [ main] o.s.b.d.LoggingFailureAnalysisReporter :


APPLICATION FAILED TO START


Description:

Field stockDao in br.com.technicalAssistance.main.controller.StockController required a bean of type ‘br.com.technicalAssistance.core.dao.StockDao’ that could not be found.

Action:

Consider defining a bean of type ‘br.com.technicalAssistance.core.dao.StockDao’ in your configuration.

o que eu fiz de errado?

17 Respostas

D

Só com estas informações fica complicado, mas, pode ser que você não tenha colocado uma das anotações abaixo:

@SpringBootApplication
@ComponentScan({"br.com.qlq"})
@EntityScan("br.com.qlq.domain")
@EnableJpaRepositories("br.com.qlq.repositories")
M

Quais voces precisam mais pra me ajudar?
Eu coloquei, estava tudo funcionando perfeitamente ate eu alterar o nome do projeto.

M

Só tenho esse erro quando uso a anotacao @Autowired no meu controller

D

Sim, isso vai acontecer pois você está referenciando um bean que o spring não encontra.

M

Como eu deveria colocar entao? O que é o bean? Minha classe StockDao existe
Segue o codigo do meu controller

@Autowired
private StockDao stockDao;

@GetMapping("/")
@ResponseBody
public String index() {
	return "Spring Boot";
}

@GetMapping("/list/{name}")
@ResponseBody
public ResponseEntity<List<Stock>> listStock(@PathVariable String name) {
	return new ResponseEntity<List<Stock>>(this.stockDao.getListStock(name), HttpStatus.OK);
}
D

StockDao é uma interface, é uma classe concreta?

M

StockDao é uma classe, não é uma interface

D

Pode postar o código dela?
Aliás, você está desenvolvendo isso seguindo algum tutorial/video/apostila/livro?

M

Estou indo por conta, ela é uma classe comum, que inclui, edita, exclui e faz consulta no banco de dados.

public class StockDao {

private final String PATHQUERYSELECT = "/query/stock/SelectScript.sql";
private final String PATHQUERYINSERT = "/query/stock/InsertScript.sql";
private final String PATHQUERYUPDATE = "/query/stock/UpdateScript.sql";
private final String PATHQUERYDELETE = "/query/stock/DeleteScript.sql";
private final Logger logger = Logger.getLogger(StockDao.class);
private Connection conn;

public StockDao() {
	conn = new ConnectionFactory().openConnection();
}

public List<Stock> getListStock(String nameProduto) {
	String query = openFile(PATHQUERYSELECT);
	List<Stock> stocks = new ArrayList<Stock>();
	try {
		ResultSet resultSet = ExecuteQuerySelect(this.conn,
				replaceValuesQuery(query, listParameters(":produto:"), listValues(nameProduto)));
		while (resultSet.next()) {
			int idEstoque = resultSet.getInt("id_estoque");
			int idProduto = resultSet.getInt("id_produto");
			String nmProduto = resultSet.getString("nm_produto");
			Date dtEntradaProduto = resultSet.getDate("dt_entrada_produto");
			int qtdProduto = resultSet.getInt("qtd_produto");
			String descricaoProduto = resultSet.getString("dc_produto");
			stocks.add(new Stock(idEstoque, nmProduto, dtEntradaProduto, qtdProduto, descricaoProduto, idProduto));
		}

		return stocks;
	} catch (SQLException e) {
		this.logger.info("Error to get result data");
		return null;
	}
}

public boolean addStock(Stock stock) {
	String query = openFile(PATHQUERYINSERT);
	List<String> parameters = listParameters(":nm_produto:", ":dt_entrada_produto:", ":qtd_produto:",
			":dc_produto:");
	List<String> values = listValues(stock.getNmProduto(), stock.getDtEntradaProduto().toString(),
			new Integer(stock.getQtdProduto()).toString(), stock.getDescricaoProduto());

	try {
		ExecuteQueryUpdate(this.conn, replaceValuesQuery(query, parameters, values));
		this.logger.info("Data successfully saved");
		return true;
	} catch (SQLException e) {
		this.logger.info("Error to insert data in database");
		return false;
	}
}

public boolean updateStock(Stock stock) {
	String query = openFile(PATHQUERYUPDATE);
	List<String> parameters = listParameters(":nm_produto:", ":dt_entrada_produto:", ":qtd_produto:",
			":dc_produto:", ":id_produto:");
	List<String> values = listValues(stock.getNmProduto(), stock.getDtEntradaProduto().toString(),
			new Integer(stock.getQtdProduto()).toString(), stock.getDescricaoProduto());

	try {
		ExecuteQueryUpdate(this.conn, replaceValuesQuery(query, parameters, values));
		this.logger.info("Data updated with successful");
		return true;
	} catch (SQLException e) {
		this.logger.info("Error to update data in database");
		return false;
	}
}

public boolean deleteStock(Stock stock) {
	String query = openFile(PATHQUERYDELETE);
	List<String> parameters = listParameters(":id_produto:");
	List<String> values = listValues(new Integer(stock.getIdProduto()).toString());

	try {
		ExecuteQueryUpdate(this.conn, replaceValuesQuery(query, parameters, values));
		this.logger.info("Data deleted with successful");
		return true;
	} catch (SQLException e) {
		this.logger.info("Error to delete data in database");
		return false;
	}
}

}

D

Quando você define um @Autowired precisa que o Spring conheça o bean que deve ser injetado.
Se você tivesse seguindo um tutorial/livro/apostila/vídeo, seria muito mais produtivo.
Você não incluiu, na classe StockDao, a anotação informando que ele é um bean gerenciado pelo Spring. Como esta é uma classe que interage com o banco de dados, o correto é anotá-la com @Repository.

M

Adicionei essa anotação na classe, porém o erro continua…

M

mais alguem?

D

Cara, eu fiz uma pesquisa simples e rápida no google e, nas 3 primeiras respostas, obtive a mesma informação:
Faltam anotações referentes ao JPA.
Eu acho (só acho, nada pessoal) que você está com preguiça de ler ou de pesquisar. Pelo tempo entre a minha resposta anterior e a tua, já era mais que tempo de ter feito uma varredura na internet e revisado tudo o que você mesmo fez.
De qualquer forma, seguem os links das pesquisas:

Link 1
Link 2
Link 3

M

Desculpa fodao da pesquisa, você está achando errado, pois como disse, estou estudando spring boot, ou seja estou tendo dificuldades! Obrigado pelos links mesmo assim

D

Está estudando como? Qual livro? Qual apostila? Qual vídeo aula?
Se você disser, quem sabe podemos direcionar as dúvidas de maneira mais adequada.
Porém, é inconcebível que você estude algo e não siga algum exemplo, não acha? Afinal, a ideia de estudar é ler/ouvir/assistir, entender e reproduzir, após isso, repetir o processo. Independente do que seja, o processo de aprendizado é esse.

G

Boa noite @matheussilva,
voce resolveu seu problema ?
Comecou a rolar comigo isso agora

A

Para aqueles que tiverem esse problema, na anotação @EnableJpaRepository coloque o caminho do pacote que possua seus repositórios. Ex:

@EnableJpaRepositories(basePackages = {“curso.api.rest.repository”})

Criado 17 de abril de 2018
Ultima resposta 18 de mai. de 2021
Respostas 17
Participantes 4