programing

Spring Boot 앱: application.properties를 선택하지 않습니까?

megabox 2023. 10. 16. 21:41
반응형

Spring Boot 앱: application.properties를 선택하지 않습니까?

여기 봄맞이 부츠 앱이 있어요. https://github.com/christophstrobl/spring-data-solr-showcase/tree/4b3bbf945b182855003d5ba63a60990972a9de72

이 잘 잘 합니다.mvn spring-boot:run

을 Spring Tools Suite 에서 "Spring Boot App 으로" 됩니다를 수 합니다.${solr.host}application.properties됩니다에 됩니다.

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'productServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void org.springframework.data.solr.showcase.product.ProductServiceImpl.setProductRepository(org.springframework.data.solr.showcase.product.ProductRepository); nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'productRepository': Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'solr.host' in string value "${solr.host}"

applications.properties 파일은 다음과 같습니다.

# SPRING MVC
spring.view.suffix=.jsp
spring.view.prefix=/WEB-INF/views/

# SOLR
solr.host=http://192.168.56.11:8983/solr

관련 클래스는 이와 같습니다($solor가 있는 유일한 장소).host 변수 사용).또한 SOLR 서버의 IP 주소를 직접 지정하면(댓글 코드와 같이) 앱이 잘 시작됩니다.

* Copyright 2012 - 2014 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.springframework.data.solr.showcase.config;

import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.annotation.PropertySources;
import org.springframework.data.solr.core.SolrTemplate;
import org.springframework.data.solr.repository.config.EnableSolrRepositories;
import org.springframework.data.solr.server.SolrServerFactory;
import org.springframework.data.solr.server.support.MulticoreSolrServerFactory;

/**
 * @author Christoph Strobl
 */
@Configuration
@EnableSolrRepositories(basePackages = { "org.springframework.data.solr.showcase.product" })

public class SearchContext {

    @Bean
    public SolrServer solrServer(@Value("${solr.host}") String solrHost) {
        return new HttpSolrServer(solrHost);
    }

//  @Bean
//  public SolrServer solrServer(@Value("http://192.168.56.11:8983/solr") String solrHost) {
//      return new HttpSolrServer(solrHost);
//  }

    @Bean
    public SolrServerFactory solrServerFactory(SolrServer solrServer) {
        return new MulticoreSolrServerFactory(solrServer);
    }

    @Bean
    public SolrTemplate solrTemplate(SolrServerFactory solrServerFactory) {
        return new SolrTemplate(solrServerFactory);
    }

}

저는 오류로 언급된 "Product Repository"를 포함하고 있습니다. 비록 많은 일이 일어나고 있지는 않지만...

* Copyright 2012 - 2014 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.springframework.data.solr.showcase.product;

import java.util.Collection;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.solr.core.query.Query.Operator;
import org.springframework.data.solr.repository.Query;
import org.springframework.data.solr.repository.SolrCrudRepository;
import org.springframework.data.solr.showcase.product.model.Product;

/**
 * @author Christoph Strobl
 */
interface ProductRepository extends SolrCrudRepository<Product, String> {

    @Query(fields = { SearchableProductDefinition.ID_FIELD_NAME, SearchableProductDefinition.NAME_FIELD_NAME,
            SearchableProductDefinition.PRICE_FIELD_NAME, SearchableProductDefinition.FEATURES_FIELD_NAME,
            SearchableProductDefinition.AVAILABLE_FIELD_NAME }, defaultOperator = Operator.AND)
    Page<Product> findByNameIn(Collection<String> names, Pageable page);

}

'표준' 파일 구조를 가지고 있어요src/메인/java 등으로 코드를 입력합니다.application.properties 파일은 src/main/resource에 있습니다.

어떤 제안이든 감사히 받아들였습니다.

(빠른 추가:Tomcat을 임베디드 서버로 실행하고 있습니다.)

이것은 잘 알려지지 않았습니다. 그리고 다른 대답들은 제가 올바른 방향으로 향하도록 하는데 큰 도움이 되었습니다.

제안한 솔루션을 사용해 본 결과, Project Properties --> Java 빌드 경로 --> Source(탭) --> 빌드 경로의 Source 폴더 : [제외 섹션]

**/application.properties

제외를 제거하면 문제가 해결되고 시작하는 동안 application.properties 파일에서 값이 선택되었습니다.

명령줄(.project 파일이 있는 디렉터리)에서 이 작업을 실행하면 제외 문제를 무시하고 정상적으로 작동했다는 점에 유의할 필요가 있습니다.

mvn spring-boot:run

저는 폼으로 포장을 해서였습니다.

에 pom.xml .

<packaging>pom</packaging>

에 비슷한 이 있다면, , ,

  1. 스프링부트 앱용으로 제거합니다.

  2. 대상 폴더를 삭제하거나 MVN을 지웁니다.

  3. mvn 설치.
  4. target/classes/application.properties 파일에서 속성을 관찰합니다.

Spring Boot 2.0.0을 사용했는데 똑같은 문제가 생겼습니다.버전 1.4.3에서는 완벽하게 작동했습니다.

이유는 이 인수를 정의하면 다음과 같습니다.

-Dspring.config.location=file:/app/application-prod.yml

Spring Boot이 검색에 기본 위치를 추가하지 않습니다.

해결책:

-Dspring.config.location=file:/app/application-prod.yml,classpath:application.yml

참조:

  1. /org/springframework/boot/context/config/ConfigFileApplicationListener.java
  2. https://docs.spring.io/spring-boot/docs/2.0.1.BUILD-SNAPSHOT/reference/htmlsingle/ #

pom.xml에 다음을 포함합니다.그러면 문제가 해결될 것입니다.

<build>
    <resources>     
        <resource>
            <directory>src/main/resources</directory>
            <includes>                      
                <include>**/*.properties</include>                  
            </includes>
        </resource>            
    </resources>
</build>

안타깝게도, 언급된 접근법들은 저에게 도움이 되지 않았습니다.Classpath에 Resources 폴더를 추가하면 문제가 해결되었습니다.

완료된 단계:

  1. 스프링 애플리케이션을 선택하고 Run configuration(실행 구성)
  2. 클래스 경로 탭 선택
  3. 사용자 항목 선택
  4. Advanced 버튼 클릭
  5. Add Folders(폴더 추가)를 선택하고 OK(확인) 버튼을 클릭합니다.
  6. 리소스 폴더(/src/main/resource)를 선택하고 확인 버튼을 클릭합니다.

enter image description here

빌드 경로에 리소스 폴더를 추가하여 해결했습니다.

전에

enter image description here

합니다. - 합니다.

  1. 폴더 추가...를 클릭합니다.
  2. 리소스 폴더 추가

enter image description here

@Configuration 클래스에서 PropertySourcesPlaceholderConfigurer을 선언합니다.

@Bean
public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {

      return new PropertySourcesPlaceholderConfigurer();
}

그리고 적절한 주석이 있는 속성 리소스 경로.

@PropertySource("classpath:your.properties")

Spring boot에서 속성을 가져오기 위한 코드가 있습니다.

@SpringBootApplication
@EnableIntegration
@EnableScheduling
@ImportResource({ "classpath*:applicationContext.xml" })
@PropertySources(value = {
@PropertySource(ignoreResourceNotFound = true, value =     "classpath:properties/application.properties"),
@PropertySource(ignoreResourceNotFound = true, value = "classpath:properties/dbNhibernateConfig.properties"),
@PropertySource(ignoreResourceNotFound = true, value = "classpath:properties/mailConfiguration.properties"),
@PropertySource(ignoreResourceNotFound = true, value = "classpath:properties/errorcodes.properties") })
@IntegrationComponentScan("com.*.report.main")
public class AgilereportsApplication{

public static void main(String[] args) {
    SpringApplication.run(AgilereportsApplication.class, args);
}
}

프로그램이 되면 가 .application.properties기본적으로 리소스 폴더에서.속성 파일을 가져올 필요가 없습니다.

해 보겠습니다.application.properties파일을 다른 폴더에 저장합니다.제 경우에는 property 파일을 resource\property 폴더로 이동하여 주석을 추가합니다.@PropertySource이 속성 파일을 읽어 볼 수 있습니다.

저는 이 문제를 겪고 있었습니다.IntelliJ에서 "Rebuild"를 수행하면 application.properties를 src/test/resources 폴더에서 target/test-class로 복사하여 작동합니다.그러나 Maven에서 빌드하면 대상/테스트 클래스 폴더에서 사라지고 application.properties 파일을 찾을 수 없으므로 maven에서 실행할 때 테스트가 실패합니다.나는 내 폴더의 이름이 잘못 붙여졌다는 것을 알게 되었습니다(위는 오타가 아닙니다).저는 "src/test/resource/application.properties" 대신 "src/test/resources/properties"를 가지고 있었습니다.그것을 발견하는 것은 정말 괴로운 일입니다.위의 답변들은 제가 그것을 열심히 공부하고 마침내 오타를 알아차릴 수 있도록 도와주었습니다.생각보다 분명하지 않았습니다.그거 조심하세요.

pom.xml 빌드 섹션에서 스프링이 속성 파일을 찾을 위치를 항상 지정할 수 있습니다.

<resources>
    <resource>
        <directory>src/main/assembly</directory>
        <filtering>true</filtering>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
    </resource>
    <resource>
        <directory>src/main/config</directory>
        <filtering>true</filtering>
    </resource>

저는 매번 인텔리J 빌드로 만들 때만, 메이븐 명령으로 만들지는 않았습니다.마침내 나는 그것을 발견했습니다.application.properties/target 폴더에 있는 파일이 업데이트되지 않았습니다.

maven(깨끗하지 않은 경우에도)을 사용하여 빌드할 때에만 변경 사항이 대상 폴더에 반영됩니다.

IntelliJ에서도 같은 종류의 문제가 있었습니다. 파일에 변수가 연결되어 있는 것을 볼 수 있었지만 SpringBoot 앱을 실행해도 연결되지 않았습니다.

삭제하여 문제를 해결하였습니다..idea폴더 및 캐시 무효화 + 재시작

추가하기PropertySourcesPlaceholderConfigurer그리고.@PropertySource당신이 당신의 속성 파일 이름을 다음과 같이 유지하기를 원할 경우에 작동해야 합니다.applications.properties. 하지만 AFAIK 스프링부팅은 자동적으로 다음을 픽업합니다.application.properties파일 이름을 변경할 수도 있습니다.applications.properties줄로 늘어놓다application.properties그러면 될 겁니다

저도 클래스 경로에 application.properties 파일을 로드하지 못하는 것과 같은 문제에 직면했습니다.제 경우에는 리소스 폴더에 속성 파일 또는 xml 파일과 같은 리소스가 둘 이상 있는 경우 리소스 폴더의 이름을 리소스로 변경해야 하는 문제가 있었습니다.스프링은 자동으로 해주지만, 그렇지 않은 경우에는 수동으로 해주십니다.내 문제를 해결해 주었으니 네 문제에 도움이 될 겁니다

src/test/resource 폴더를 생성하는 동안 "Update exclusion filters in other source folders in other source folders to solve nesting" 확인란을 선택합니다.또한 PropertySource를 사용하여 src를 로드합니다.

@PropertySource(value = {"classpath:application-junit.properties"}, 
ignoreResourceNotFound = true)

제 경우에는 Encryption Utility 클래스가 있었고 기본 속성 파일에서 공용 키와 개인 키를 로드하고 있었습니다.

@구성요소 주석을 추가하는 것이 효과적이었습니다.

@Component
public class AESEncryption {

private static String BASE64_ENCODED_PUBLIC_KEY;
private static String BASE64_ENCODED_PRIVATE_KEY;

    public AESEncryption(@Value("${BASE64_ENCODED_PUBLIC_KEY}") String BASE64_ENCODED_PUBLIC_KEY,
                         @Value("${BASE64_ENCODED_PRIVATE_KEY}") String BASE64_ENCODED_PRIVATE_KEY) {
        this.BASE64_ENCODED_PUBLIC_KEY = BASE64_ENCODED_PUBLIC_KEY;
        this.BASE64_ENCODED_PRIVATE_KEY = BASE64_ENCODED_PRIVATE_KEY;
    }
}

응용프로그램 속성 파일의 이름을 바꾸고 사용해 보십시오.탐지하고 컴파일해야 합니다.그것은 나에게 효과가 있었다.

몇 시간을 소비한 후에 효과가 있었습니다.

문제:Springboot 2.X.X는 application.properties/application.yml을 무시하고 항상 기본 포트 8080에서 Tomcat을 시작합니다.

근본 원인:Spring boot 2.x.x부터 이상하며 일부 기계에서만 볼 수 있습니다.스프링 문서에는 이런 개념이 없습니다.이것은 사용자 정의 문제입니다.

솔루션: spring.config.location을 classpath:application.properties로 제공합니다(일반적으로 외부 구성 파일의 경우 이 방법을 사용하지만 이 문제의 경우에는 이 방법을 사용합니다).그것도 당신에게 도움이 되는지 알려주세요.

제 경우에는 리소스 폴더가 리소스로 등록되어 있지 않았습니다.저는 IntelliJ를 사용하기 때문에 모듈 설정 부분으로 가서 리소스 폴더를 선택한 다음 창 위쪽에 있는 리소스를 클릭했습니다.그 후 application.properties 파일을 가져가기 시작했습니다.

속성 파일을 실수로 삭제한 후 다시 만들어야 할 때 발생했습니다.메이븐 프로젝트 업데이트 작업이 잘 되었습니다.

제 경우에는 logback-spring.xml 이었습니다.로그백 파일 이름에서 스프링을 제거한 후 작동을 시작했습니다.

언급URL : https://stackoverflow.com/questions/33022827/spring-boot-app-not-picking-up-application-properties

반응형