Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
生成失败错误:java:USFW_未同步_SINGLETON_FIELD_写入如何修复报告的斑点bug问题_Java_Spring Boot_Spotbugs - Fatal编程技术网

生成失败错误:java:USFW_未同步_SINGLETON_FIELD_写入如何修复报告的斑点bug问题

生成失败错误:java:USFW_未同步_SINGLETON_FIELD_写入如何修复报告的斑点bug问题,java,spring-boot,spotbugs,Java,Spring Boot,Spotbugs,我面临错误:java:USFW\u UNSYNCHRONIZED\u SINGLETON\u FIELD\u写入并且setter方法的构建失败。这是spotbugs报道的。如何修复此问题,请帮助解决此问题。 下面是MySuperServiceConfig类 @Component @ConfigurationProperties("mysuperservice") @PropertySource("classpath:data.properties") pu

我面临
错误:java:USFW\u UNSYNCHRONIZED\u SINGLETON\u FIELD\u写入
并且setter方法的构建失败。这是spotbugs报道的。如何修复此问题,请帮助解决此问题。
下面是MySuperServiceConfig类

@Component
@ConfigurationProperties("mysuperservice")
@PropertySource("classpath:data.properties")
public class MySuperServiceConfig {
  private String username;
  private String password;
  private List<String> schemadata;

  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 List<String> getSchemadata() {
    return schemadata;
  }

  public void setSchemadata(List<String> schemadata) {
    this.schemadata = schemadata;
  }
}

spotbug文档中有一些关于此错误的信息

USFW_未同步_单例_字段_写入

此方法写入此类的字段。因为这节课被看到了 作为一个单体,这可能会产生竞争条件,或导致不可见 更改为其他线程,因为未访问该字段 同步地

由于配置属性类用组件注释标记,Spotbug会知道这是一个单例Bean。配置bean没有自动连接任何字段-username/password/schemaData,但它有一个getter和setter方法。因此,代码似乎可以多次更改bean或依赖项的这些实例属性。在这种情况下,由于方法不同步,可能存在竞争条件。 因此,修复方法应该是删除此组件注释,因为这是一个配置属性映射器类

要自动连线,您可以-

  • 在SpringBootApplication类或其他配置类上使用@EnableConfigurationProperties(MySuperServiceConfig.class)
  • 将其标记为@Configuration类

  • 我认为您不应该在这个类上使用组件注释。您可以尝试删除它并进行检查吗?是的,它解决了生成失败的问题,但在删除组件注释后,它不可用于自动连接和获取运行时错误字段myAppProperties(位于com.test.AppController中)。AppController需要找不到类型为“com.test.service.fileparser.MySuperServiceConfig”的bean。@user11244881谢谢您认为它解决了问题,并且在使用注释配置后,它也可用于自动布线。很酷,我将添加一个答案,解释为什么我认为组件注释是问题所在
    [INFO] --- spotbugs-maven-plugin:3.1.12.2:check (default) @ aif-handler ---
    [INFO] BugInstance size is 3
    [INFO] Error size is 0
    [INFO] Total bugs: 3
    [ERROR] Method com.test.service.fileparser.MySuperServiceConfig.setPassword(String) of Singleton class writes to a field in an unsynchronized manner [com.amex.scs.aif.service.fileparser.MySuperServiceConfig] At MySuperServiceConfig.java:[line 29] USFW_UNSYNCHRONIZED_SINGLETON_FIELD_WRITES
    [ERROR] Method com.test.service.fileparser.MySuperServiceConfig.setSchemadata(List) of Singleton class writes to a field in an unsynchronized manner [com.amex.scs.aif.service.fileparser.MySuperServiceConfig] At MySuperServiceConfig.java:[line 37] USFW_UNSYNCHRONIZED_SINGLETON_FIELD_WRITES
    [ERROR] Method com.test.service.fileparser.MySuperServiceConfig.setUsername(String) of Singleton class writes to a field in an unsynchronized manner [com.amex.scs.aif.service.fileparser.MySuperServiceConfig] At MySuperServiceConfig.java:[line 21] USFW_UNSYNCHRONIZED_SINGLETON_FIELD_WRITES