SpringBoot 正式環境必不可少的外部化配置

前言

中有讀者反應:

部署后運維很不方便,比較修改一個 IP 配置,需要重新打包。

這一點我是深有體會,17 年自學,並很大膽的直接在生產環境用的時候,我都是讓產品經理(此時他充當我們的運維,嘿嘿)用壓縮軟件打開 jar,然後複製出配置,修改完之後再替換回去。為什麼我這麼大膽,因為當時才入行一年,而且覺得有架構師兜底,我就奔放了。你是不知道,當時負責這個項目的開發(c#開發)一開始不想用 SpringBoot 的。

不過如今看到這個問題,我有點震驚,都 9102 年了,竟然還擔心這樣的問題。我想說,哥們,這真的不是事兒。SpringBoot 早就提供了方法來解決這個問題。

SpringBoot 生產特性

SpringBoot 有很多生產特性,可以在生產環境中使用時更加方便。其中外部化配置基本都會用到。

Spring Boot 允許外部化配置,以便相同的應用在不同的環境中工作。
屬性值可以在 Spring 環境中使用 @Value 或 @ConfigurationProperties 使用。

此次參考的版本是 SpringBoot-2.2.0.RELEASE

優先級

外部化配置的優先級順序如下:

  1. Devtools 全局配置:當 devtools 啟用時,$HOME/.config/spring-boot
  2. 測試類中的 @TestPropertySource
  3. 測試中的 properties 屬性:在 @SpringBootTest 和 用來測試特定片段的測試註解
  4. 命令行參數
  5. SPRING_APPLICATION_JSON 中的屬性:內嵌在環境變量或系統屬性中的 JSON
  6. ServletConfig 初始化參數
  7. ServletContext 初始化參數
  8. java:comp/env 中的 JNDI 屬性
  9. Java 系統屬性:System.getProperties()
  10. 操作系統環境變量
  11. 隨機值(RandomValuePropertySource):random.*屬性
  12. jar 包的指定 profile 配置文件:application-{profile}.properties
  13. jar 包的指定 profile 配置文件:application-{profile}.properties
  14. jar 包的默認配置文件:application.properties
  15. jar 包的默認配置文件:application.properties
  16. 代碼內的 @PropertySource註解:用於 @Configuration 類上
  17. 默認屬性:通過設置 SpringApplication.setDefaultProperties 指定

注意:以上用 properties 文件的地方也可用 yml文件

配置隨機值

my.uuid=${random.uuid}

命令行屬性

java -jar -Ddemo=vm demo.jar --demo=arg
  • -Dxxx 為 vm 參數,在代碼中通過 System#getProperty 獲取
  • –xxx 為 spring 命令行參數,通過 Environment#getProperty 獲取,若通過此方法獲取不到,會獲取 vm 同名參數
  • xxx.jar 之後的參數都是 arg 參數,都會在 main 方法中的 arg 數組中獲取到

示例

public static void main(String[] args) {
    ConfigurableApplicationContext context = SpringApplication.run(ArgApplication.class, args);
    LOGGER.info("----------------");
    /* 打印 arg 參數 */
    Arrays.stream(args)
        .forEach(
            arg -> {
              LOGGER.info("arg:{}", arg);
            });
    /* 命令行傳參 demo */
    LOGGER.info("System#getProperty:{}", System.getProperty("demo"));
    LOGGER.info("Environment#getProperty:{}", context.getEnvironment().getProperty("demo"));
}

輸入命令

java -jar -Ddemo=vm arg-0.0.1-SNAPSHOT.jar aaa bbb ccc --demo=arg

效果如下:

----------------
arg:aaa
arg:bbb
arg:ccc
arg:--demo=arg
System#getProperty:vm
Environment#getProperty:arg

而如果執行命令是:

java -jar -Ddemo=vm arg-0.0.1-SNAPSHOT.jar aaa bbb ccc

結果如下:

arg:aaa
arg:bbb
arg:ccc
System#getProperty:vm
Environment#getProperty:vm

如果執行命令是:

java -jar arg-0.0.1-SNAPSHOT.jar aaa bbb ccc --demo=arg

結果如下:

arg:aaa
arg:bbb
arg:ccc
arg:--demo=arg
System#getProperty:null
Environment#getProperty:arg

屬性文件

優先級:

  1. file:./config/
  2. file:./
  3. classpath:/config/
  4. classpath:/

如果定義了 spring.config.location,如:classpath:/custom-config/,file:./customr-config/,優先級如下:

  1. file:./custom-config/
  2. classpath:custom-config/

如果指定了 spring.config.additional-location,會先加載 additional 配置 如:spring.config.additional-location=classpath:/custom-config/,file:./customr-config/,優先級如下:

  1. file:./custom-config/
  2. classpath:/custom-config/
  3. file:./config/
  4. file:./
  5. classpath:/config/
  6. classpath:/

指定 profile 的屬性

默認的 profile 是 default,當沒有指定spring.profiles.active 屬性時,默認會加載application-default.properties 文件。指定 profiles 文件的加載順序與上述不指定 profiles 文件的加載一致。指定 profile 文件的屬性始終覆蓋未指定文件的屬性。如:spring.profiles.active=dev,則 application-dev.properties文件內的屬性會覆蓋 application.properties 內的同名屬性。

注意:如果在 spring.config.location 屬性中指定了 文件,則此文件對應的特定 profiles 類文件不起作用。如果想要起作用,在 spring.config.location 中使用 文件夾

佔位符

配置文件中可以引用之前定義的值,如下:

app.name=MyApp
app.description=${app.name} is a Spring Boot application.

可以用此特性創建一些已存在的 Spring Boot 配置的較短、易於使用的變量。如下:

# nacos 配置示例
spring:
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        namespace: d9a39d78-xxxxxxxx-ea4f282e9d99
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: d9a39d78-xxxxxxxx-ea4f282e9d99
# Discovery 配置示例        
nacos:
  plugin:
    namespace: d9a39d78-xxxxxxxx-ea4f282e9d99

可改為如下配置

spring:
  cloud:
    nacos:
      config:
        server-addr: ${app.server-addr}
        namespace: ${app.namespace}
      discovery:
        server-addr: ${app.server-addr}
        namespace: ${app.namespace}
# Discovery 配置示例        
nacos:
  plugin:
    namespace: ${app.namespace}

app:
  server-addr: 127.0.0.1:8848
  namespace: d9a39d78-xxxxxxxx-ea4f282e9d99

然後在命令行可以直接通過 -Dapp.namespace--app.namespace 來傳參,會方便很多。特別是在多個地方用到同一個屬性的時候。

屬性加密

Spring Boot 不支持屬性加密,但提供鈎子節點修改配置屬性。EnvironmentPostProcessor 接口允許在應用啟動前操作 Environment

yaml

yaml 文件使用的時候非常直觀、方便。而且在 Spring Boot 中做了處理,獲取 yaml 和 properties 文件中的屬性基本是一樣的操作。

一個文件指定多 pfofile

通過 spring.profiles 指示何時使用對應的配置,使用 ---進行配置分隔

# application.yml
server:
  address: 192.168.1.100
---
spring:
  profiles: development
server:
  address: 127.0.0.1
---
spring:
  profiles: production & eu-central
server:
  address: 192.168.1.120

yaml 缺點

@PropertySource 不能加載 yaml 文件,這種情況下只能使用 properties 文件。

在特定 profile 的 yaml 文件中使用多 profile 配置,會有意料之外的情況:

# application-dev.yml
server:
  port: 8000
---
spring:
  profiles: "!test"
  security:
    user:
      password: "secret"

當運行時指定 --spring.profiles.active=dev ,啟用 dev profile,其它的 profile 會忽略。也就是此例中 spring.security.user.password 屬性會失效。

因此,不要在指定 profile 的 yaml 文件中使用多種 profile 配置。

類型安全的屬性配置

JavaBean 屬性綁定

通過 @ConfigurationProperties 註解將屬性(properties、yml 文件、環境變量等)綁定到類對象中。與自動配置類類似。

@ConfigurationProperties("acme")
public class AcmeProperties{
    private boolean enabled;
    private InetAddress remoteAddress;
    private final Security security = new Security();
    // getter and setter
    public static class Security{
        private String username;
        private String password;
        private List<String> roles = new ArrayList<>(Collections.singleton("USER"));
         // getter and setter
    }
}

這種安排依賴於默認的無參構造器,getter 和 setter 通常是必需的,因為綁定就像 Spring MVC 一樣是通過標準的 Java Beans 屬性描述符進行的。在下列情況下,可省略 setter:

  • Maps:只要被初始化后,getter 必須而 setter 不必須,binder 可以對它們進行修改
  • Collections 和 數組:可以通過索引或逗號分隔的值來設定屬性。後者必須有 setter 方法。建議對於這種情況一直加上 setter。如果初始化了一個 Collection,確保它不是不可變類型。
  • 如果初始化了嵌套的 POJO 屬性(如上例中的 Security),setter 不是必須的。如果需要 binder 通過其默認構造器動態創建實例,則需要 setter

注意:如果使用 Lombok 生成 getter 和 setter,確保不會生成任何特定的構造器,不然容器會自動使用它來實例化對象。
最後,只有標準 Java Bean 屬性可以這樣綁定屬性,靜態屬性不支持。

構造器綁定

上述示例可以改成如下:

@ConstructorBinding
@ConfigurationProperties("acme")
public class AcmeProperties{
  private final boolean enabled;
  private final InetAddress remoteAddress;
  private final Security security;
  
  public AcmeProperties(boolean enabled, InetAddress remoteAddress, Security security){
      this.enabled = enabled;
      this.remoteAddress = remoteAddress;
      this.security = security;
  }
  // getter and setter
  
  public static class Security{
      private final String username;
      private final String password;
      private final List<String> roles;
      public Security(String username, String password, @DefaultValue("USER") List<String> roles){
          this.username = username;
          this.password = password;
          this.roles = roles;
      }
      // getter and setter
  }
}

@ConstructorBinding 註解表示使用構造函數綁定屬性值。這意味着 binder 將期望找到一個包含待綁定參數的構造器。
@ConstructorBinding 類的嵌套成員也將通過構造函數綁定屬性值。

可以使用 @DefaultValue 指定默認值,轉換服務將字符串值強轉為缺少屬性的目標類型。

要使用構造綁定,類必須允許使用 @EnableConfigurationProperties 或 配置屬性掃描方式。不能對由常規 Spring 機制創建的 bean 使用構造函數綁定。如:@Component Bean、通過@Bean 方法創建的 Bean 或使用@Import 加載的 Bean

如果類中有多個構造器,可以直接將 @ConstructorBinding 註解使用在要綁定的構造器上。

啟用 @ConfigurationProperties 註解類型

Spring Boot 提供了一個基礎設施來綁定這些類型並將它們自動註冊為 bean。
如果應用程序中使用 @SpringBootsApplication,用 @ConfigurationProperties 註解的類將被自動掃描並註冊為 bean。默認情況下,將從聲明此註解的類的包中進行掃描。如果要掃描特定的包,可以對 ·@SpringBootsApplication 註解的類顯式使用 @ConfigurationPropertiescan 註解,如下例所示:

@SpringBootApplication
@ConfigurationPropertiesScan({ "com.example.app", "org.acme.another" })
public class MyApplication {
}

有時,用 @ConfigurationProperties 註釋的類可能不適合掃描,例如,如果正在開發自己的自動配置,在這些情況下,可以在任何@Configuration 類上指定要處理的類型列表,如下例所示:

@Configuration(proxyBeanMethods = false) @EnableConfigurationProperties(AcmeProperties.class)
public class MyConfiguration { }

注意:當使用配置屬性掃描或通過@EnableConfigurationProperties 註冊@ConfigurationProperties bean 時,bean 有一個常規名稱:<prefix>-<fqn>,其中 <prefix>@ConfigurationProperties 註解中指定的環境 key 前綴,<fqn> 是 bean 的完全限定名。如果註解沒有提供任何前綴,則只使用 bean 的完全限定名。
上例中 bean name 是 acme-com.example.AcmeProperties

使用@ConfigurationProperties 註解類型

這種類型的配置在 SpringApplication 外部 YAML 配置中特別適用,如下例所示:

# application.yml

acme:
  remote-address: 192.168.1.1
  security:
    username: admin
    roles:
      - USER
      - ADMIN

@ConfigurationProperties bean 可以像其它 bean 一樣注入使用。如下:

@Service
public class MyService{
    private final AcmeProperties properties;
    
    @Autowired
    public MyService(AcmeProperties properties){
        this.properties = properties;
    }
    
    // ...
}

使用 @ConfigurationProperties 還可以生成元數據文件,IDE 可以使用這些文件提供代碼自動完成功能。

第三方配置

除了可以在 上使用 @ConfigurationProperties 註解,還可以在 public @Bean 方法上使用它。如果要將屬性綁定到不在控制範圍內的第三方組件,那麼這樣做特別有用。

要從 Environment 屬性配置 bean,將 @ConfigurationProperties 添加到其 bean 註冊中,如下例所示:

@ConfigurationProperties(prefix = "another")
@Bean
public AnotherComponent anotherComponent() {
    //... 
}

another 前綴定義的任何 JavaBean 屬性都映射到 AnotherComponent bean 上,映射方式類似於前面的 AcmeProperties 示例。

鬆綁定

Spring Boot 使用一些寬鬆的規則將 Environment 屬性綁定到@ConfigurationProperties bean,因此環境屬性名和 bean 屬性名之間不需要完全匹配。常見的包括短劃線分隔的環境屬性(例如,context-path 綁定到 contextPath)和大寫的環境屬性(例如,PORT 綁定到 port)。

@ConfigurationProperties(prefix="acme.my-project.person")
public class OwnerProperties {
    private String firstName;
    public String getFirstName() {
        return this.firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
}

對於以上 Java Bean,可以使用以下屬性

注意:註解的前綴值必須是短橫線 (小寫,用-分隔,如:acme.my-project.person)。

放寬每個屬性源的綁定規則

建議:如果可能的話,將屬性存儲為小寫的短橫線格式,例如:my.property-name=acme。

在綁定到 Map 屬性時,如果 key 包含除小寫字母-数字字符或 - 之外的任何內容,則需要使用括號符號,以便保留原始值。如果 key 沒有被[]包圍,則刪除任何不是字母数字或 -的字符。

acme:
  map:
    "[/key1]": value1
    "[/key2]": value2
    /key3: value3

上面的屬性將綁定到 Map 的這些 key 中:/key1/key2key3

合併複雜類型

List

當在多個位置配置 list 時,通過替換(而非添加)整個 list 來覆蓋。

@ConfigurationProperties("acme")
public class AcmeProperties {
    private final List<MyPojo> list = new ArrayList<>();
    public List<MyPojo> getList() { return this.list;
    }
}
acme:
  list:
    - name: my name
      description: my description
---
spring:
  profiles: dev
acme:
  list:
    - name: my another name

當啟用 dev 配置時,AcmeProperties.list 中值包含一個 MyPojo 對象(name 為my another name),不是添加操作,而是覆蓋操作。

當一個 List 在多個 profiles 中定義時,最高優先級的被使用。

Map

對於 Map 屬性,可以使用從多個屬性源獲取屬性值進行綁定。但是,對於多個源中的同一屬性,將使用優先級最高的屬性。

@ConfigurationProperties("acme")
public class AcmeProperties {
    private final Map<String, MyPojo> map = new HashMap<>();
    public Map<String, MyPojo> getMap() {
    return this.map;
    }
}
acme:
  map:
    key1:
      name: my name 1
      description: my description 1
---
spring:
  profiles: dev
acme:
  map:
    key1:
      name: dev name 1
    key2:
      name: dev name 2
      description: dev description 2

當 dev 配置啟用時,AcmeProperties.map 中包含兩個鍵值對。key1 中 pojo name 為 dev name 1,description 為 my description 1;key2 中 pojo name 為 dev name 2,description 為 dev description 2。

不同屬性源的配置進行了合併

以上合併規則適用於所有的屬性源

屬性轉換

Spring Boot 試圖在綁定到 @ConfigurationProperties bean 時將外部應用程序屬性強轉為正確的類型。如果需要自定義類型轉換,可以提供 ConversionService bean(帶有名為 ConversionService 的 bean)或自定義屬性編輯器(通過 CustomEditorConfigurer bean)或自定義 Converters (使用 bean 定義註解 @ConfigurationPropertiesBinding )。

注意:由於此 bean 在應用程序生命周期的早期被請求,請確保限制 ConversionService 正在使用的依賴項。通常,需要的任何依賴項在創建時都可能未完全初始化。如果自定義的 ConversionService 不需要配置 keys 強轉,並且僅依賴於使用 @ConfigurationPropertiesBinding 限定的自定義轉換器,則可能需要將它重命名。

時間區間轉換

SpringBoot 對錶示持續時間有專門的支持。如果暴露 java.time.Duration 屬性,則可以用以下格式:

  • 常規的 long 表示(除非指定了 @DurationUnit,否則使用毫秒作為默認單位)
  • java.time.Duration 使用的標準 ISO-8601 格式
  • 一種更可讀的格式,其中值和單位是耦合的(例如,10s 表示 10 秒)
@ConfigurationProperties("app.system")
public class AppSystemProperties {

    @DurationUnit(ChronoUnit.SECONDS)
    private Duration sessionTimeout = Duration.ofSeconds(30);

    private Duration readTimeout = Duration.ofMillis(1000);

    public Duration getSessionTimeout() {
        return this.sessionTimeout;
    }

    public void setSessionTimeout(Duration sessionTimeout) {
        this.sessionTimeout = sessionTimeout;
    }

    public Duration getReadTimeout() {
        return this.readTimeout;
    }

    public void setReadTimeout(Duration readTimeout) {
        this.readTimeout = readTimeout;
    }

}

要指定 30 秒的 sessionTimeout,30、PT30S 和 30s 都是等效的。500ms 的 readTimeout 可以用以下任何形式指定:500、PT0.5S 和 500ms。
也可以使用以下任何支持的單位:

  • ns:納秒
  • us:微妙
  • ms:毫秒
  • s:秒
  • m:分
  • h:時
  • d:天

默認的單位是毫秒,可以使用 @DurationUnit 指定

數據 size 轉換

Spring 框架有一個 DataSize 類型,以字節表示大小。如果暴露一個 DataSize 屬性,則可以用以下格式:

  • 常規的 long 表示(除非指定了 @DataSizeUnit,否則使用字節作為默認單位)
  • java.time.Duration 使用的標準 ISO-8601 格式
  • 一種更可讀的格式,其中值和單位是耦合的(例如,10MB 表示 10 兆字節)。
@ConfigurationProperties("app.io")
public class AppIoProperties {

    @DataSizeUnit(DataUnit.MEGABYTES)
    private DataSize bufferSize = DataSize.ofMegabytes(2);

    private DataSize sizeThreshold = DataSize.ofBytes(512);

    public DataSize getBufferSize() {
        return this.bufferSize;
    }

    public void setBufferSize(DataSize bufferSize) {
        this.bufferSize = bufferSize;
    }

    public DataSize getSizeThreshold() {
        return this.sizeThreshold;
    }

    public void setSizeThreshold(DataSize sizeThreshold) {
        this.sizeThreshold = sizeThreshold;
    }

}

要指定 10 兆字節的 bufferSize1010MB 是等效的。256 字節的 sizeThreshold 可以指定為 256256B
也可以使用以下任何支持的單位:
B:字節
KB:千字節
MB:兆字節
GB:千兆字節
TB:兆兆字節

默認的單位是字節,可以使用 @DataSizeUnit 指定

@ConfigurationProperties 校驗

每當對 @ConfigurationProperties 類使用 Spring 的@Validated 註解時,Spring Boot 就會驗證它們。可以直接在配置類上使用 JSR-303 javax.validation 約束註解。必須確保類路徑上有一個兼容的 JSR-303 實現(如:hibernate-validator),然後將約束註解添加到字段中。

@ConfigurationProperties(prefix="acme")
@Validated
public class AcmeProperties {
    @NotNull
    private InetAddress remoteAddress;
    
    // ... getters and setters
}

注意:還可以通過註解@Bean 方法來觸發驗證,該方法使用@Validated 創建配置屬性。

儘管嵌套屬性在綁定時也將被驗證,但最好對關聯字段使用 @Valid。這確保即使找不到嵌套屬性,也會觸發驗證。

@ConfigurationProperties(prefix="acme")
@Validated
public class AcmeProperties {

    @NotNull
    private InetAddress remoteAddress;

    @Valid
    private final Security security = new Security();

    // ... getters and setters

    public static class Security {

        @NotEmpty
        public String username;

        // ... getters and setters

    }

}

還可以通過創建ConfigurationPropertiesValidator bean 來添加自定義 Spring Validator@Bean 方法應該聲明為 static 。配置屬性驗證器是在應用程序生命周期的早期創建的,將@Bean 方法聲明為 static 可以創建 Bean,而無需實例化@configuration 類。這樣做可以避免任何可能由早期實例化引起的問題。

注意:spring-boot-actuator 模塊包含一個端點,該端點暴露所有 @ConfigurationProperties bean。訪問 /actuator/configprops 可獲得相關信息。

@ConfigurationProperties vs. @Value

@Value 註解是一個核心容器特性,它不提供與 @ConfigurationProperties 相同的特性。

如果需要為組件定義了一組配置鍵,建議將它們配置到一個 @ConfigurationProperties 註解的 POJO 中。由於 @Value 不支持鬆綁定,如果需要使用環境變量提供值,則它不是一個好的選項。
雖然可以在 @Value 中編寫 SpEL 表達式,但此類表達式不會從 properties 文件中處理。

使用配置中心

如果項目比較大的話,分成了好幾個 SpringBoot 工程,可以使用某些 SpringCloud 組件,比如:配置中心。配置中心支持一個地方管理所有的配置,有些還可以支持修改配置實時生效而不用重啟應用,真的是很棒棒呢。推薦使用 nacos。如果項目比較小,你用 git 或者指定文件夾來作為配置存放的地方也可以。

怎麼樣?有了這些用法的支持,你還會覺得 Springboot 打成一個 jar 會在部署的時候很不方便嗎?

參考資料

公眾號:逸飛兮(專註於 Java 領域知識的深入學習,從源碼到原理,系統有序的學習)

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

特斯拉需求大!住友金屬追加擴產電池材料、增至2.5倍

 

日本住友金屬礦山(Sumitomo Metal Mining)28日發布新聞稿宣布,該公司雖已於去年10月27日表示將砸下180億日圓於2018年1月將鋰離子電池正極材料「鎳酸鋰(見附圖)」月產能擴增至3,550噸,不過因電動車(EV)用鋰離子電池需求擴大,因此決議對「鎳酸鋰」進行追加增產措施,計畫投入40億日圓於磯浦工廠進行增產工程,目標在2018年6月將整體「鎳酸鋰」月產能擴增至4,550噸、將達現行的2.5倍。

住友金屬礦山指出,該公司正持續擴大與Panasonic攜手研發的高性能鎳酸鋰產能,此次為了因應Panasonic擴大鋰離子電池產能、故決定對鎳酸鋰進行追加增產投資。

據日經新聞指出,住友金屬礦山追加增產「鎳酸鋰」主要是因應美國EV廠特斯拉(Tesla)增產所需。據報導,住友金屬礦山目前透過Panasonic供應特斯拉電動車所需的大部分車用電池正極材料。

根據嘉實XQ全球贏家系統報價,截至台北時間31日上午8點50分為止,住友金屬礦山上揚1.34%至1,660.5日圓,稍早最高漲至1,664.5日圓創約5個月來(2月16日以來)新高水準。

特斯拉平價電動車「Model 3」於7月28日正式交車。Business Insider、The Motley Fool、Electrek等外電報導,Model 3售價35,000美元,特斯拉原本計畫要在2020年底前,將Model 3年產量提升至50萬台,但去(2016)年該公司把目標提前兩年、移至2018年。不過,Model 3目前的生產年率還只有10萬台,特斯拉想要達標、產速勢必得快速拉升。

富士經濟6月22日公布調查報告指出,預估2030年時EV年銷售量將增至407萬台、超越HV(油電混合車、2030年銷售量預估為391萬台),且之後雙方的差距將持續擴大。富士經濟預估,在中國需求增加加持下,2035年EV全球銷售量將擴大至630萬台、將達2016年的13.4倍(較2016年增加12.4倍)。

(本文內容由授權使用。圖片出處:MoneyDJ)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

燃料電池車緩不濟急,豐田擬2019年量產電動車

中國擅長以政策引導經濟發展,據日經新聞報導,豐田為符合中國新能源車規定,可能於2019年開始在中國量產電動車。

報導指出,有鑒於美國、中國與其它地區汽車排放規定轉嚴,豐田已要求同集團的汽車零件廠Denso、愛信精機(Aisin Seiki)合力成立子公司,務求加速電動車的開發作業。

就新能源車而言,以氫氣驅動的「燃料電池車」才是豐田首選,然而「燃料電池車」需要廣建加氫站曠日廢時,而中國新能源車最快於2018年上路,迫使豐田退而求其次。

豐年2012年就曾推出RAV4 EV電動休旅車,採用特斯拉製鋰電池,但市場反應不佳,僅賣出2500輛,豐田隨後也宣布停產。在中國政策引導下,豐田第二次做電動車是否會產生不一樣的結果,有待觀察。

吉利汽車旗下的Volvo日前已宣布從2019年起,旗下所有新車都會是純電動或油電混合驅動,象徵純汽油車將走入歷史。

(本文內容由授權使用。圖片出處:豐田)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

為了Model 3 的「生產地獄」,特斯拉可能將再次發債籌資

隨著Model 3 車款開始正式交車,特斯拉(Tesla)的「生產地獄」也即將來臨,這意味著特斯拉將開始以非常低的現金流維持運行,為了提高能使用的現金量,馬斯克正在考慮發債籌資。

華爾街日報報導,在日前公布的第二季財報中,特斯拉的虧損幅度小於外界預期,但馬斯克(Elon Musk)也同時承認,相較起以往的車款,生產Model 3 的挑戰還會再高出許多。

根據了解,特斯拉的目標是在2018 年底前,達到每周生產1 萬台Model 3 的目標,但做為比較,去年其他車款的周產量還不到2,000 台。

「當我用『生產地獄』來形容Model 3 的生產時,我是認真的。」

儘管如此,特斯拉對於「生產地獄」的情況似乎並不陌生,它們正為了雄心勃勃的產能時間表投入大筆資金,在加州和內華達州增設工廠,並大量投入研究和開發。

第二季的財報顯示,特斯拉目前手上有約30 億美元的現金,但為了因應Model 3 的生產,特斯拉預估下半年將再花費20 億美元,這將讓特斯拉的現金部位降至10 億美元。

儘管特斯拉表示,下半年持有的現金和增加的收入應該足以涵蓋所有支出項目,但摩根史丹利分析師Ryan Brinkman 對此仍抱持懷疑。

(Source:Tesla Club Belgium via Flickr CC2.0)

對於現金部位是否足夠的疑問,馬斯克表示,為了更快速的生產Model 3,特斯拉已經和供應商談判了更好的付款條件,可以在繳交零組件的帳單之前先賣車,但馬斯克也同意,在現金部位上保有緩衝空間總是更明智的選擇。

馬斯克強調,特斯拉正有在考慮發債籌資,但是並沒有考慮增加股權。財務長Deepak Ahuja 指出,特斯拉還有8 億美元的信貸額度空間,而且從新收購的太陽能業務中,也還能獲得近7 億美元的稅收股權基金(tax equity funds)和債務。

但根據S&P 全球市調機構統計,在2017 年第一季時,包含長期票據和資本租貸(Capital Leases)在內,特斯拉已有約有96.7 億美元的未還債務,年初發售的股票和優先債更讓債務再次往上提升。

對於有著支出需求的特斯拉前景,摩根士丹利分析師Adam Jonas 如此評估:「額外的資本支出會讓投資者的眼中充滿淚水,而時間會告訴他們這是不是喜悅的眼淚。」

晨星研究(Morningstar)的分析師David Whiston 則表示,不論是特斯拉今年再次發債,或是明年再度公開籌資,都不會是需要驚訝的事情,「人們需要習慣特斯拉的『習慣』──極度仰賴資本籌集來實現野心勃勃的成長目標。」

根據了解,Model 3 在去年原本有約51.8 萬張訂單,由於交車時間持續延後,有6.3 萬筆訂單取消,目前訂單約有45.5 萬張。

對於這些取消的訂單,馬斯克表示,其實只需要再多一些努力,特斯拉可以保留下更多Model 3 的訂單,但他認為這些需求的減少並不是什麼大問題。

「這就像是經營一家餐廳,你正在賣漢堡,但目前的等待時間大約需要1.5 小時,這樣你還會鼓勵更多的人來買漢堡嗎?」

(合作媒體:。首圖來源:Tesla)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

EV續航距離倍增、媲美汽油車!GS傳量產新電池

 

日經新聞8日報導,GS Yuasa將在2020年開始量產可讓電動車(EV)充飽一次電所能行駛的距離擴增至現行2倍的新型鋰離子電池。現行部分EV充飽電所能行駛的距離僅有汽油車的一半左右水準,而搭載GS新型電池將讓EV續航距離增加至可媲美汽油車的水準。GS為全球第4大車用鋰離子電池廠。

報導指出,上述新型電池由GS、三菱商事(Mitsubishi)、三菱汽車(Mitsubishi Motors)合資設立的電池製造公司「Lithium Energy Japan(簡稱LEJ)」所研發,將在2020年透過LEJ工廠進行量產,將供應給日系、歐系車廠使用,價格目標是壓低至同於現行產品的水準。GS、三菱商事、三菱汽車對LEJ的出資比重分別為51%、46%、3%。

根據GS公布的財報資料顯示,上季(2017年4-6月)GS車用鋰離子電池事業營收較去年同期成長4.2%至87.24億日圓、營損額自去年同期的2.17億日圓縮小至1.64億日圓。

法國、英國已紛紛表明計畫在2040年停售汽柴油車,提振EV後續需求料將急速擴大。

富士經濟6月22日公布調查報告指出,預估2030年時EV年銷售量將增至407萬台、超越HV(油電混合車、2030年銷售量預估為391萬台),且之後雙方的差距將持續擴大。富士經濟預估,在中國需求增加加持下,2035年EV全球銷售量將擴大至630萬台、將達2016年的13.4倍(較2016年增加12.4倍)。

(本文內容由授權使用。圖片出處:GS Yuasa)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

Tesla 確認以債券募資15 億美元,用來全力提升Model 3 產能

2017 年8 月7 日電動車製造商特斯拉(Tesla)發表聲明稱將透過發行債券的方式籌集15 億美元,用於提升Model 3 電動車的產量。據Tesla 的財報顯示,2017 年第二季該公司的支出高達11.6 億美元。

Model 3 是Tesla 推出的一款廉價電動車,定價僅3.5 萬美元,由於這極具競爭力的價格,Model 3 發表後就收到大量訂單,提升Model 3 的產能是Tesla 面臨的最大挑戰。為了能如期交付Model 3 訂單,Tesla 投入巨資新建電動車製造工廠和電池製造工廠,2017 年第二季的支出達創紀錄的11.6 億美元。

在2017 年7 月28 日Model 3 新車交付會上,Tesla CEO 馬斯克(Elon Musk)表示,過去半年Tesla 在提升Model 3 的產能方面面臨巨大的挑戰,截至2017 年7 月底,Model 3 的總訂單量已超過50 萬台,據Tesla 先前的生產計畫,到2018 年Model 3 的產能預期提升到50 萬台,2020 年達到100 萬台,但2016 年Tesla 全年的電動車產量僅為8.4 萬台。

身為全球最受關注的電動車製造商,Tesla 大約持有30 億美元現金,即將帶來的大規模提升產能計畫是對資金實力的巨大挑戰。在2017 年第二季的財報會議上,馬斯克曾表示短時間內將進行募資,但不打算透過使用股權投資的方式,而是發行公司債券。

Tesla 將把15 億美元用於提升Model 3 產能,到2017 年12 月Model 3 的產能將提升到每月2 萬台,目前預訂這台車的消費者,最早也需等到2018 年底才能拿到新車。

(合作媒體:。圖片出處:Tesla Club Belgium via Flickr CC2.0)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

特斯拉內湖總部暨服務園區開幕,體驗維修加上產學合作全都在這裡

特斯拉內湖總部暨服務園區開幕,除了繼續請政府官員站台支持特斯拉背後代表的潔淨能源,以及更新每多一台特斯拉車子上路改善了多少污染狀況,第四座超級充電站啟用之外,特斯拉展示特斯拉想給車主的潔淨印象,園區內車主的汽車和維修全在這裡,並且還會與在地廠商合作,以及產學合作的進行場合。

位於臺北市民權大橋旁的特斯拉內湖園區,為一多功能的園區。特斯拉台灣總部辦公室座落其中,而,其中還有包括大講堂和多功能會議,能夠運用從美國過來的培訓資源,與在地廠商緊密合作交流,還有本地大專院校的產學合作,一同推動永續能源和電動車的發展。

 

▲ 特斯拉內湖服務園區啟用儀式,將特斯拉的維修能量帶到台灣來。

臺灣第四座超級充電站也在特斯拉內湖園區啟用,10 座充電站為全台最大的超級充電站。未來特斯拉也會陸續在高雄、臺灣東部尋覓適當的設置地點,服務車主環島駕車的需求。目前在台灣本島彰化、雲林仍未有目的地充電站,特斯拉也會加緊腳步找到適合地點設置。

▲ 特斯拉內湖服務園區內的超級充電站。

特斯拉全球副總裁、亞太區總裁任宇翔提到特斯拉減輕環境付擔的數據,100% 的車主是換購或是加購,取代原先家裡的排氣車輛,而超過90% 的車主選擇安裝充電站,Model S 取代一般排氣車,Model X則是取代排氣房車。特斯拉累積賣出20 萬台車子,累積80 億公里的總里程,為地球節省5 億公升的汽油消耗量。

▲ 特斯拉累積達成的數據。

▲ 特斯拉的電動車技術能有效降低碳排放。

特斯拉為了打造高科技、清潔能源的印象,內湖服務園區不同於傳統修車廠,依照美國那邊的標準作業流程和要求,要做到維修、保養場地相當乾淨整潔的狀況。車主可以在這邊舒適等待車子完成保養和維修。另外內湖園區也有體驗中心和交車中心,提供想買特斯拉電動車的潛在車主體驗的地方,以及車主下訂後交車,在這裡學會特斯拉車內軟體操作。

▲ 特斯拉車子的內裝。

▲ 體驗中心展示的特斯拉電動車底盤。

▲ 特斯拉維修中心的設備。

另外特斯拉也會儘快將更多車型,如Model 3 帶進台灣。未來也將會見到特斯拉品牌的SUV、卡車、巴士。目前儘管台灣只有特斯拉電動車,任總裁強調特斯拉的其他事業,如儲能和太陽能單位,將在適當時機來到台灣。

▲ 特斯拉內湖園區也具備訓練空間,供廠商和學校在此展開訓練課程。

 

(合作媒體:。圖片出處:科技新報)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

中國30餘省市加大政策補貼力道,充電樁建設步爆發期

21經濟網報導,為推進新能源汽車行業健康發展,中國許多城市近期紛紛調整補貼政策,下調整車補貼,上調充電樁補貼。中國國家新能源汽車技術創新工程專家組組長王秉剛表示,現在電動車這條腿已走在前頭,要拉動基礎設施建設這另一條腿。從建設落後到「適度超前」,業內人士預計,未來三年中國充電樁產業將迎來大發展,市場規模預估達千億級(人民幣,下同)。

根據中國深圳財委和深圳發改委日前發佈《深圳市2017年新能源汽車推廣應用財政支持政策》通知,汽車補貼大幅下調。而在此同時,充電樁的補貼則較去年高一倍。其中,新建直流充電設備的補貼標準從原有的300元/千瓦提升到600元/千瓦,交流充電設備補貼從150元/千瓦提升到300元/千瓦。

另據中國國家能源局和中國電動汽車充電基礎設施促進聯盟聯合編制的《中國電動汽車充電基礎設施發展年度報告(2016-2017)》顯示,包括北京、唐山、貴陽、廈門、石家莊等30多個省市均出臺了充電設施建設補貼政策,加大了補貼力道,補貼最高達設施投資的30%。

據充電樁數量最多的北京在8月8日公佈資料,截至今年6月底,累計建成約9.23萬個充電樁,形成六環內平均服務半徑5公里的公用充電網路,且充電樁網路下半年繼續擴建。根據目標,北京將在2020年前建電動汽車充電樁約43.5萬個;其中,今年北京計畫新建3,000個公用充電樁,並研擬對新建建築配套停車場的充電樁數量進行固定配比。

北京將在未來數年迎來充電樁數量大爆發。而事實上,除了北京之外,多地對於充電樁建設的積極性都頗高,例如到2020年,上海市新能源車輛充電樁規模至少達到21.1萬個;廣東將建成分散式充電樁約35萬個。

根據中國《能源發展十三五規劃》,到2020年將建設「四縱四橫」城際電動汽車快速充電網路,新增超過800座城際快速充電站;新增集中式充換電站超過1.2萬座,分散式充電樁則超過480萬個,滿足全國500萬輛電動汽車充換電需求。

不過,政策補貼力道增大的同時,也不斷有建成充電樁使用率低、充電位被燃油汽車佔用等現象發生,由此產生了充電樁「白補貼」的質疑;特別是有了新能源汽車騙補的前車之鑒,對充電樁補貼發放標準從嚴考核的呼聲越來越大。對此,王秉剛建議,應加強對補貼資金發放、使用等的管理和監督並明確制度,應不能建成就能拿補貼,而是有效運行後才能拿補貼。

(本文內容由授權使用。圖片出處:public domain CC0)

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

大卡車、大巴士「電動化」對於企業以及城市空氣品質皆是大利多

  你曾有被巷口安靜無聲的電動汽車或從背後輕輕掠過的電動機車嚇到的經驗嗎?不久的將來,可能大卡車就在你身後也渾然不知。   隨著油電混和車以及純電動車的持續發展,這股新潮流也湧向了卡車與其他大型車輛的發展,因為它們排放的廢氣造成的污染遠遠高於小汽車。國際能源署(International Energy Agency,IEA)指出,人類若想減緩地球暖化,將現行的車輛電動化將是重要的一環。   全球道路上估計有約 3 億輛營業用車,如此龐大的數量對空氣品質的影響不可輕忽。弗若斯特沙利文公司(Frost & Sullivan,國際著名的市場研究、出版和培訓公司)的交通運輸專家 Ananth Srinivasan 分析師說:「在歐洲,大卡車與商用車的數量雖然僅佔汽車總數的 5%,但排放的溫室氣體卻高達 20%。」若能將其電動化必定能使空氣更清新(註 1)。   巴黎、雅典、馬德里和墨西哥城的市長已於 2016 年在墨西哥簽署了一份「空氣品質宣言」,承諾將於 2025 年禁止柴油車在城市行駛,以減少柴油車廢氣排放對空氣的污染;上個月英國政府更宣布,將於 2040 年禁止販賣柴油車。   柴油車造成的空氣污染比汽油車嚴重,其排放的微粒子污染物較多,有害健康。過去十年來,柴油車排放的二氧化氮持續上升,有毒的微粒進入人體後可能侵害所有器官、危害健康,並且會增加心臟病、中風和氣喘風險。   電動卡車與電動巴士正在世界各地的道路掀起一股革新的風潮(註 2)。在歐洲,德國郵政公司已著手建立電動車隊,並計劃販售電動車給其他企業組織。而美國洛杉磯則計劃於 2030 年達成巴士零排放(zero emission)的目標;在倫敦已有某些路段的公車路線僅允許電動公車行駛;而印度這個基礎建設相對落後的國家,為了改善空氣品質以及減少對石油的依賴,也宣示 2030 年後只允許銷售電動車輛。就連澳洲這般地廣人稀、空氣污染不嚴重的國度,電動車也是如火如荼發展中。   電動車發展的瓶頸之一是充電站的設置,但對某些行駛固定路線的營業車輛而言則較易克服。由於行駛路徑具可預測性,企業願意投資其所屬電動車停靠站設置充電站,夜間離峰的電費若有優惠也可進一步降低企業支出;但專家也警告,如此一來供電需求上升將無可避免,世界各國的輸電網路必須有所因應。   對長程運輸的大型車輛而言,電池蓄電量仍是一項艱鉅的挑戰,目前的技術僅有油電混合車足以擔當長途運輸。此外,有試驗計畫正嘗試於長途公路架設供電電纜,為行駛於道路的電動卡車提供即時電力。   各國政府與大型企業對於將工務車電動化皆展現高度興趣。各種載具電動化的計畫各有其優缺點,而大型組織顯然佔有優勢。因為企業購買電動車在資金方面比一般個人更有彈性,通常較有能力吸收高額的費用;而早年採用油電混和車的企業經營者,近年來已逐漸回收當時的投資了。不難想像,純電動卡車、巴士所省下的油耗支出必定更為可觀。屆時「大烏賊」將從道路上絕跡。   註 1:目前全球最大的電動車市場是中國。未改善嚴重的空氣污染,中國政府對電動車有極優惠的補貼政策,因而使中國電動車市場蓬勃發展。   註 2:賓士公司已率先推出全球首款全電動大卡車──都市電動卡車(Urban eTruck,見首圖),載重可高達 26 公噸。但續航距離僅有 200 公里,適合短程、區域性載貨使用。   (合作媒體:。圖片出處:public domain CC0)  

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

搶當環保車二哥!現代推新型燃料電池車,續航增40%

韓聯社報導,南韓汽車業龍頭現代汽車(Hyundai Motor)17日在首爾公開了新型燃料電池車(FCV),並預計於2018年初開賣。和現代汽車現行FCV車款「Tucson」相比,新型FCV的氫燃料電池系統的效率、性能、耐久性、儲存容量都有劃時代的提升,充填一次燃料(氫)所能行駛的距離可較現行的415km大幅提升約40%至580km,且預定將搭載先進駕駛輔助系統(Advanced Driver Assistance Systems;ADAS)。   現代汽車並宣布,計畫在2020年結束前將環保車(Eco-car)車款數量自現行的14款倍增至31款,其中油電混合車(HV)為10款、插電式油電混合車(PHV)11款、電動車(EV)8款、FCV 2款,目標是在全球環保車市場上成為僅次於日本豐田(Toyota)的第2大廠。   日經新聞報導,現代汽車上述新型FCV預計於2018年Q1搶先在南韓市場開賣,而現代汽車幹部指出,「預計將在2018年下半年搶進歐美及澳洲市場,且也計畫在中國市場進行販售」,期望藉此在FCV市場上追擊跑在前頭的豐田。現代汽車上述新型FCV馬達輸出為163馬力、高於豐田「MIRAI」的154馬力。   報導並指出,現代汽車也宣布,計畫在2018年上半年開賣充飽一次電可行駛390km的SUV款EV,且現代汽車也正著手研發續航距離可達500km的EV。   豐田汽車社長豐田章男2016年1月接受日經/金融時報聯訪時表示,「今後100年將是環保車的時代」,他說,「汽車產業過去1個世紀來,主要以汽油引擎為主流,不過下一個100年,燃料電池車、插電式油電混合車等各種環保車需求將增長」。   富士經濟6月22日公布調查報告指出,現行環保車種以HV需求最大,預估截至2025年左右為止,HV仍將是環保車種的主流產品,不過PHV、EV在2025年以後需求將急速增加,預估2030年時EV年銷售量將增至407萬台、超越HV(2030年銷售量預估為391萬台),且之後雙方的差距將持續擴大。   富士經濟預估,在中國需求增加加持下,2035年EV全球銷售量將擴大至630萬台、將達2016年的13.4倍(較2016年增加12.4倍)。   (本文內容由授權使用)  

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益