工信部發佈第二批新能源車型目錄

2月29日,工信部發佈《新能源汽車推廣應用推薦車型目錄》(第2批),共有466款車型,進入此次目錄。

在純電動轎車\乘用車方面,比亞迪、東風、風神、啟辰、蓮花、邁迪、之諾、中華、吉利、知豆、康迪、騰勢、眾泰、江南、力帆、長安、奇瑞、凱翼、開瑞、江鈴、海馬、野馬、寶馬等21個品牌的車入選。

插電式混合動力轎車\乘用車方面,比亞迪、野馬、榮威三個品牌的車型入選。另外,傳祺GAC7100SHEVD5增程式混合動力轎車、比亞迪BYD7150WTHEV3和沃爾沃VCC7204C13PHEV混合動力轎車入選。

純電動客車方面,海格、東風、青年、福田、海格、黃海、金杯、申沃、暢達、亞星、安凱、宇通、比亞迪、野馬、金龍、金旅、中通、申龍、大馬、開沃、山西、黑龍江、象牌、常隆、陸地方舟、星凱龍、舒馳、江西、飛燕、揚子江、南車時代、廣通、蜀都、萬達等品牌的車型入選。插電式混合動力客車方面,亞星、安凱、晶馬、中通等品牌的車型入選。

混合動力客車方面,宇通、萬達、南車時代、中通、金旅、金龍、海格、比亞迪、福田等品牌的車型入選。

值得注意的是,純電動專用車都未進入第一批和第二批新能源汽車推廣應用推薦車型目錄中。

 

序号

企业名称

《目录》

序号

商标

产品型号

产品名称

1

东风汽车公司

3

东风牌

DFA7000L2ABEV

纯电动轿车

2

东风汽车公司

3

东风牌

DFA7000L2ABEV1

纯电动轿车

3

东风汽车公司

3

东风牌

DFA7000L2ABEV2

纯电动轿车

4

东风汽车公司

3

风神牌

DFM7000G1ABEV

纯电动轿车

5

东风汽车公司

3

风神牌

DFM7000H2ABEV1

纯电动轿车

6

东风汽车公司

3

风神牌

DFM7000H2DBEV1

纯电动轿车

7

东风汽车公司

3

东风牌

EQ6100CLBEV1

纯电动城市客车

8

东风汽车公司

3

东风牌

EQ6100CLCHEV

混合动力城市客车

9

东风汽车公司

3

东风牌

EQ6111CBEV

纯电动客车

10

东风汽车公司

3

东风牌

EQ6600CBEV

纯电动客车

11

东风汽车公司

3

东风牌

EQ6600CBEV1

纯电动客车

12

东风汽车公司

3

东风牌

EQ6600CBEV2

纯电动城市客车

13

东风汽车公司

3

东风牌

EQ6600CBEV3

纯电动客车

14

东风汽车公司

3

东风牌

EQ6600CBEV4

纯电动客车

15

东风汽车公司

3

东风牌

EQ6600CBEV5

纯电动城市客车

16

东风汽车公司

3

东风牌

EQ6620CLBEV2

纯电动城市客车

17

东风汽车公司

3

东风牌

EQ6640CLBEV1

纯电动客车

18

东风汽车有限公司

3

启辰牌

DFL7000B2BEV

纯电动轿车

19

东风特种汽车有限公司

3

东风牌

EQ6670CBEVT1

纯电动城市客车

20

金华青年汽车制造有限公司

7

青年牌

JNP6700BEV

纯电动城市客车

21

金华青年汽车制造有限公司

7

青年牌

JNP6700LBEV

纯电动客车

22

金华青年汽车制造有限公司

7

莲花牌

JNP7000BEV

纯电动轿车

23

金华青年汽车制造有限公司

7

迈迪牌

JNP7001BEV3

纯电动轿车

24

金华青年汽车制造有限公司

7

迈迪牌

JNP7001BEV4

纯电动轿车

25

北汽福田汽车股份有限公司

9

福田牌

BJ6105CHEVCG-1

混合动力城市客车

26

北汽福田汽车股份有限公司

9

福田牌

BJ6105EVCA-5

纯电动城市客车

27

北汽福田汽车股份有限公司

9

福田牌

BJ6105PHEVCA-10

混合动力城市客车

28

北汽福田汽车股份有限公司

9

福田牌

BJ6113PHEVUA

混合动力客车

29

北汽福田汽车股份有限公司

9

福田牌

BJ6116EVUA

纯电动客车

30

北汽福田汽车股份有限公司

9

福田牌

BJ6123CHEVCA-2

混合动力城市客车

31

北汽福田汽车股份有限公司

9

福田牌

BJ6123CHEVCG-1

混合动力城市客车

32

北汽福田汽车股份有限公司

9

福田牌

BJ6123EVCA-21

纯电动城市客车

33

北汽福田汽车股份有限公司

9

福田牌

BJ6123EVCA-22

纯电动城市客车

34

北汽福田汽车股份有限公司

9

福田牌

BJ6123PHEVCA-10

混合动力城市客车

35

北汽福田汽车股份有限公司

9

福田牌

BJ6127EVUA-2

纯电动客车

36

北汽福田汽车股份有限公司

9

福田牌

BJ6127PHEVCA-1

混合动力城市客车

37

北汽福田汽车股份有限公司

9

福田牌

BJ6127PHEVUA-1

混合动力客车

38

北汽福田汽车股份有限公司

9

福田牌

BJ6127PHEVUA-2

混合动力客车

39

北汽福田汽车股份有限公司

9

福田牌

BJ6180EVCA-1

纯电动城市客车

40

北汽福田汽车股份有限公司

9

福田牌

BJ6180SHEVCA

混合动力城市客车

41

北汽福田汽车股份有限公司

9

福田牌

BJ6731EVCA-1

纯电动城市客车

42

北汽福田汽车股份有限公司

9

福田牌

BJ6731EVUA-1

纯电动客车

43

北汽福田汽车股份有限公司

9

福田牌

BJ6905CHEVCA-1

混合动力城市客车

44

北汽福田汽车股份有限公司

9

福田牌

BJ6905CHEVCA-2

混合动力城市客车

45

一汽客车(大连)有限公司

28

解放牌

CA6103URHEV31

混合动力城市客车

46

丹东黄海汽车有限责任公司

29

黄海牌

DD6109CHEV4N

混合动力城市客车

47

丹东黄海汽车有限责任公司

29

黄海牌

DD6109EV11

纯电动城市客车

48

丹东黄海汽车有限责任公司

29

黄海牌

DD6109PHEV1N

混合动力城市客车

49

丹东黄海汽车有限责任公司

29

黄海牌

DD6129CHEV7N

混合动力城市客车

50

丹东黄海汽车有限责任公司

29

黄海牌

DD6129CHEV8N

混合动力城市客车

51

丹东黄海汽车有限责任公司

29

黄海牌

DD6129PHEV1N

混合动力城市客车

52

丹东黄海汽车有限责任公司

29

黄海牌

DD6600EV3

纯电动客车

53

华晨宝马汽车有限公司

33

之诺(ZINORO)牌

BBA7000EV(ZINORO1E)

纯电动轿车

54

华晨宝马汽车有限公司

33

宝马(BMW)牌

BMW7201AMHEV(BMW530Le)

插电式混合动力轿车

55

华晨汽车集团控股有限公司

33

中华牌

SY7000BEVDAE1

纯电动轿车

56

沈阳华晨金杯汽车有限公司

33

金杯牌

SY6548BEVD3HB

纯电动轻型客车

57

上海申沃客车有限公司

42

申沃牌

SWB6108EV47

纯电动城市客车

58

上海申沃客车有限公司

42

申沃牌

SWB6108EV52

纯电动城市客车

59

上海申沃客车有限公司

42

申沃牌

SWB6110EV65

纯电动客车

60

上海申沃客车有限公司

42

申沃牌

SWB6121EV60

纯电动城市客车

61

上海申沃客车有限公司

42

申沃牌

SWB6128EV52

纯电动城市客车

62

上海申沃客车有限公司

42

申沃牌

SWB6128EV56

纯电动城市客车

63

南京汽车集团有限公司

44

畅达牌

NJ6708BEV

纯电动客车

64

扬州亚星客车股份有限公司

49

亚星牌

JS6111SHEVC

插电式混合动力双层城市客车

65

扬州亚星客车股份有限公司

49

亚星牌

YBL6111HBEV

纯电动客车

66

扬州亚星客车股份有限公司

49

亚星牌

YBL6600BEV6

纯电动客车

67

扬州亚星客车股份有限公司

49

亚星牌

YBL6600BEV7

纯电动客车

68

浙江豪情汽车制造有限公司

52

吉利牌

JL7001BEV34

纯电动轿车

69

浙江豪情汽车制造有限公司

52

沃尔沃牌

VCC7204C13PHEV

混合动力轿车

70

浙江吉利汽车有限公司

52

吉利牌

SMA7000BEV06

纯电动轿车

71

浙江吉利汽车有限公司

52

吉利牌

SMA7001BEV05

纯电动轿车

72

浙江吉利汽车有限公司

52

知豆牌

SMA7001BEV18

纯电动轿车

73

浙江吉利汽车有限公司

52

知豆牌

SMA7001BEV19

纯电动轿车

74

浙江吉利汽车有限公司

52

知豆牌

SMA7001BEV22

纯电动轿车

75

浙江吉利汽车有限公司

52

知豆牌

SMA7001BEV23

纯电动轿车

76

浙江吉利汽车有限公司

52

知豆牌

SMA7001BEV60

纯电动轿车

77

浙江吉利汽车有限公司

52

知豆牌

SMA7001BEV61

纯电动轿车

78

浙江吉利汽车有限公司

52

康迪牌

SMA7002BEV05

纯电动轿车

79

安徽安凯汽车股份有限公司

55

安凯牌

HFF6100G03EV-2

纯电动城市客车

80

安徽安凯汽车股份有限公司

55

安凯牌

HFF6102G03CHEV-1

插电式混合动力城市客车

81

安徽安凯汽车股份有限公司

55

安凯牌

HFF6102G03EV-3

纯电动城市客车

82

安徽安凯汽车股份有限公司

55

安凯牌

HFF6109G03EV

纯电动城市客车

83

安徽安凯汽车股份有限公司

55

安凯牌

HFF6109K10EV

纯电动客车

84

安徽安凯汽车股份有限公司

55

安凯牌

HFF6110K10EV

纯电动客车

85

安徽安凯汽车股份有限公司

55

安凯牌

HFF6121G03CHEV-2

插电式混合动力城市客车

86

安徽安凯汽车股份有限公司

55

安凯牌

HFF6121K10EV

纯电动客车

87

安徽安凯汽车股份有限公司

55

安凯牌

HFF6122G03CHEV-2

插电式混合动力城市客车

88

安徽安凯汽车股份有限公司

55

安凯牌

HFF6123G03EV-2

纯电动城市客车

89

安徽安凯汽车股份有限公司

55

安凯牌

HFF6127K46EV-6

纯电动客车

90

安徽安凯汽车股份有限公司

55

安凯牌

HFF6660GEVB

纯电动城市客车

91

安徽安凯汽车股份有限公司

55

安凯牌

HFF6660GEVB1

纯电动城市客车

92

安徽安凯汽车股份有限公司

55

安凯牌

HFF6707BEV

纯电动客车

93

安徽安凯汽车股份有限公司

55

安凯牌

HFF6708BEV

纯电动客车

94

安徽安凯汽车股份有限公司

55

安凯牌

HFF6800GEVB

纯电动城市客车

95

安徽安凯汽车股份有限公司

55

安凯牌

HFF6800GEVB2

纯电动城市客车

96

安徽安凯汽车股份有限公司

55

安凯牌

HFF6800GEVB3

纯电动城市客车

97

安徽安凯汽车股份有限公司

55

安凯牌

HFF6851G03EV

纯电动城市客车

98

安徽江淮汽车股份有限公司

56

江淮牌

HFC6601EVH

纯电动客车

99

安徽江淮汽车股份有限公司

56

江淮牌

HFC6601EVH1

纯电动客车

100

江西江铃集团晶马汽车有限公司

62

晶马牌

JMV6105GRPHEV

插电式混合动力城市客车

101

江西江铃集团晶马汽车有限公司

62

晶马牌

JMV6115GRPHEV

插电式混合动力城市客车

102

江西江铃集团晶马汽车有限公司

62

晶马牌

JMV6115GRPHEVN

插电式混合动力城市客车

103

江西江铃集团晶马汽车有限公司

62

晶马牌

JMV6700BEV

纯电动客车

104

郑州宇通客车股份有限公司

71

宇通牌

ZK6105CHEVNPG11

混合动力城市客车

105

郑州宇通客车股份有限公司

71

宇通牌

ZK6105CHEVNPG52

混合动力城市客车

106

郑州宇通客车股份有限公司

71

宇通牌

ZK6105CHEVPG31

混合动力城市客车

107

郑州宇通客车股份有限公司

71

宇通牌

ZK6105PHEVNPG3

混合动力城市客车

108

郑州宇通客车股份有限公司

71

宇通牌

ZK6115PHEVPG1

混合动力城市客车

109

郑州宇通客车股份有限公司

71

宇通牌

ZK6115PHEVPT5

混合动力客车

110

郑州宇通客车股份有限公司

71

宇通牌

ZK6119BEVQ2

纯电动客车

111

郑州宇通客车股份有限公司

71

宇通牌

ZK6120CHEVNPG11

混合动力城市客车

112

郑州宇通客车股份有限公司

71

宇通牌

ZK6120CHEVPG31

混合动力城市客车

113

郑州宇通客车股份有限公司

71

宇通牌

ZK6120PHEVNPG3

混合动力城市客车

114

郑州宇通客车股份有限公司

71

宇通牌

ZK6125BEV1Y

纯电动客车

115

郑州宇通客车股份有限公司

71

宇通牌

ZK6125BEV1Z

纯电动客车

116

郑州宇通客车股份有限公司

71

宇通牌

ZK6125BEV2Y

纯电动客车

117

郑州宇通客车股份有限公司

71

宇通牌

ZK6125BEV4

纯电动客车

118

郑州宇通客车股份有限公司

71

宇通牌

ZK6125CHEVNPG11

混合动力城市客车

119

郑州宇通客车股份有限公司

71

宇通牌

ZK6125CHEVNPG52

混合动力城市客车

120

郑州宇通客车股份有限公司

71

宇通牌

ZK6125CHEVPG11

混合动力城市客车

121

郑州宇通客车股份有限公司

71

宇通牌

ZK6125CHEVPG31

混合动力城市客车

122

郑州宇通客车股份有限公司

71

宇通牌

ZK6125CHEVPG52

混合动力城市客车

123

郑州宇通客车股份有限公司

71

宇通牌

ZK6641BEVG10

纯电动城市客车

124

郑州宇通客车股份有限公司

71

宇通牌

ZK6641BEVG4

纯电动城市客车

125

郑州宇通客车股份有限公司

71

宇通牌

ZK6701BEVQ8

纯电动客车

126

郑州宇通客车股份有限公司

71

宇通牌

ZK6808BEVQ1

纯电动客车

127

郑州宇通客车股份有限公司

71

宇通牌

ZK6906BEVQ5

纯电动客车

128

比亚迪汽车工业有限公司

79

比亚迪牌

BYD6121LGEV

纯电动城市客车

129

比亚迪汽车工业有限公司

79

比亚迪牌

BYD6420SHEV

插电式混合动力多用途乘用车

130

比亚迪汽车工业有限公司

79

比亚迪牌

BYD6450VHEV5

插电式混合动力多用途乘用车

131

比亚迪汽车工业有限公司

79

比亚迪牌

BYD6650HZEV

纯电动城市客车

132

比亚迪汽车工业有限公司

79

比亚迪牌

BYD6710HLEV

纯电动客车

133

比亚迪汽车工业有限公司

79

比亚迪牌

BYD6710HZEV

纯电动城市客车

134

比亚迪汽车工业有限公司

79

比亚迪牌

CK6100LGEV

纯电动城市客车

135

比亚迪汽车工业有限公司

79

比亚迪牌

CK6120LGEV2

纯电动城市客车

136

比亚迪汽车工业有限公司

79

比亚迪牌

CK6121LGEV

纯电动城市客车

137

比亚迪汽车工业有限公司

79

比亚迪牌

CK6800LZEV

纯电动城市客车

138

比亚迪汽车工业有限公司

79

比亚迪牌

CK6800LZEV2

纯电动城市客车

139

比亚迪汽车工业有限公司

79

腾势牌

QCJ7007BEV

纯电动轿车

140

湖南江南汽车制造有限公司

84

众泰牌

JNJ6408EV1

纯电动多用途乘用车

141

湖南江南汽车制造有限公司

84

江南牌

JNJ7000EVA6

纯电动轿车

142

湖南江南汽车制造有限公司

84

众泰牌

JNJ7000EVE3

纯电动轿车

143

湖南江南汽车制造有限公司

84

众泰牌

JNJ7000EVE4

纯电动轿车

144

湖南江南汽车制造有限公司

84

众泰牌

JNJ7000EVK

纯电动轿车

145

湖南江南汽车制造有限公司

84

众泰牌

JNJ7000EVK1

纯电动轿车

146

湖南江南汽车制造有限公司

84

众泰牌

JNJ7000EVS

纯电动轿车

147

湖南江南汽车制造有限公司

84

众泰牌

JNJ7000EVS1

纯电动轿车

148

湖南江南汽车制造有限公司

84

众泰牌

JNJ7000EVX7

纯电动轿车

149

湖南江南汽车制造有限公司

84

众泰牌

JNJ7000EVX8

纯电动轿车

150

湖南江南汽车制造有限公司

84

众泰牌

JNJ7000EVX9

纯电动轿车

151

广州汽车集团乘用车有限公司

89

传祺(Trumpchi)牌

GAC7100SHEVD5

增程式混合动力轿车

152

重庆力帆乘用车有限公司

93

力帆牌

LF7002CEV260

纯电动轿车

153

重庆长安汽车股份有限公司

96

长安牌

SC7003AEV

纯电动轿车

154

四川野马汽车股份有限公司

101

野马牌

SQJ6111B3BEV

纯电动城市客车

155

四川野马汽车股份有限公司

101

野马牌

SQJ6420BEV

纯电动乘用车

156

四川野马汽车股份有限公司

101

野马牌

SQJ6420SHEV

插电式混合动力乘用车

157

四川野马汽车股份有限公司

101

野马牌

SQJ6460BEV

纯电动乘用车

158

四川野马汽车股份有限公司

101

野马牌

SQJ6610BEV

纯电动客车

159

四川野马汽车股份有限公司

101

野马牌

SQJ6900B3BEV

纯电动客车

160

比亚迪汽车有限公司

108

比亚迪牌

BYD6460STHEV1

插电式混合动力多用途乘用车

161

比亚迪汽车有限公司

108

比亚迪牌

BYD7005BEV

纯电动轿车

162

比亚迪汽车有限公司

108

比亚迪牌

BYD7150WT5HEV

插电式混合动力轿车

163

比亚迪汽车有限公司

108

比亚迪牌

BYD7150WTHEV3

混合动力轿车

164

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6109EV0H

纯电动客车

165

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6109EV0N

纯电动客车

166

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6109EV0N1

纯电动客车

167

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6109EV1N

纯电动客车

168

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6109GAHEVE5BZ

混合动力城市客车

169

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6115HZEV0H

纯电动客车

170

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6115HZEV0N

纯电动客车

171

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6115HZEV0N1

纯电动客车

172

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6115HZEV0X1

纯电动客车

173

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6115HZEV1H

纯电动客车

174

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6115HZEV1N

纯电动客车

175

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6115HZEV1X1

纯电动客车

176

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6125LZEV0X

纯电动客车

177

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6125LZEV1X

纯电动客车

178

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6125ZEV0H

纯电动客车

179

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6125ZEV0N

纯电动客车

180

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6125ZEV1H

纯电动客车

181

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6129GAEVN1

纯电动城市客车

182

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6129GAHEVE4B

混合动力城市客车

183

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6601BEV1N1

纯电动客车

184

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6601GBEVX2

纯电动城市客车

185

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6602GEVH

纯电动城市客车

186

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6606BEV0X2

纯电动客车

187

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6702EV0N

纯电动客车

188

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6702GEVN

纯电动城市客车

189

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6800GEVN2

纯电动城市客车

190

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6800GEVX

纯电动城市客车

191

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6802EV0H

纯电动客车

192

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6802EV0N

纯电动客车

193

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6802GEVH

纯电动城市客车

194

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6802GEVN

纯电动城市客车

195

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6802GEVX

纯电动城市客车

196

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6802KAEV0H1

纯电动客车

197

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6802KAEV0H2

纯电动客车

198

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6802KAEV0N

纯电动客车

199

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6802KAEV0N1

纯电动客车

200

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6802KAEV1N1

纯电动客车

201

金龙联合汽车工业(苏州)有限公司

112

海格牌

KLQ6850GEVN

纯电动城市客车

202

奇瑞汽车股份有限公司

119

开瑞牌

SQR6440BEVK06

纯电动多用途乘用车

203

奇瑞汽车股份有限公司

119

开瑞牌

SQR6440BEVK08

纯电动多用途乘用车

204

奇瑞汽车股份有限公司

119

奇瑞牌

SQR7000BEVJ00

纯电动轿车

205

奇瑞汽车股份有限公司

119

奇瑞牌

SQR7000BEVJ001

纯电动轿车

206

奇瑞汽车股份有限公司

119

凯翼牌

SQR7000BEVJ51

纯电动轿车

207

奇瑞汽车股份有限公司

119

开瑞牌

SQR7000BEVK08

纯电动轿车

208

江铃控股有限公司

121

江铃牌

JX70010BEV

纯电动轿车

209

江铃控股有限公司

121

江铃牌

JX7005BEV

纯电动轿车

210

江铃控股有限公司

121

江铃牌

JX7006BEV

纯电动轿车

211

江铃控股有限公司

121

江铃牌

JX7007BEV

纯电动轿车

212

江铃控股有限公司

121

江铃牌

JX7008BEV

纯电动轿车

213

江铃控股有限公司

121

江铃牌

JX7009BEV

纯电动轿车

214

上海汽车集团股份有限公司

122

荣威牌

CSA7144CDPHEV

插电式混合动力轿车

215

上海汽车集团股份有限公司

122

荣威牌

CSA7155TDPHEV

插电混合动力轿车

216

厦门金龙联合汽车工业有限公司

123

金龙牌

XMQ6106AGBEVL

纯电动城市客车

217

厦门金龙联合汽车工业有限公司

123

金龙牌

XMQ6106AGHEV14

混合动力城市客车

218

厦门金龙联合汽车工业有限公司

123

金龙牌

XMQ6110BCBEVL7

纯电动客车

219

厦门金龙联合汽车工业有限公司

123

金龙牌

XMQ6113BYBEVL3

纯电动客车

220

厦门金龙联合汽车工业有限公司

123

金龙牌

XMQ6113BYBEVL4

纯电动客车

221

厦门金龙联合汽车工业有限公司

123

金龙牌

XMQ6113BYPHEVD4

混合动力客车

222

厦门金龙联合汽车工业有限公司

123

金龙牌

XMQ6127AGPHEVN51

混合动力城市客车

223

厦门金龙联合汽车工业有限公司

123

金龙牌

XMQ6129HYPHEVD4

混合动力客车

224

厦门金龙联合汽车工业有限公司

123

金龙牌

XMQ6610CEBEVL2

纯电动客车

225

厦门金龙联合汽车工业有限公司

123

金龙牌

XMQ6610CEBEVL3

纯电动客车

226

厦门金龙联合汽车工业有限公司

123

金龙牌

XMQ6610CEBEVL4

纯电动客车

227

厦门金龙联合汽车工业有限公司

123

金龙牌

XMQ6662AGBEVL

纯电动城市客车

228

厦门金龙联合汽车工业有限公司

123

金龙牌

XMQ6662AGBEVL1

纯电动城市客车

229

厦门金龙联合汽车工业有限公司

123

金龙牌

XMQ6706BYBEVL

纯电动客车

230

厦门金龙联合汽车工业有限公司

123

金龙牌

XMQ6706BYBEVL1

纯电动客车

231

厦门金龙联合汽车工业有限公司

123

金龙牌

XMQ6706BYBEVL2

纯电动客车

232

厦门金龙联合汽车工业有限公司

123

金龙牌

XMQ6802AGBEVL

纯电动城市客车

233

厦门金龙联合汽车工业有限公司

123

金龙牌

XMQ6850AGBEVL2

纯电动城市客车

234

厦门金龙联合汽车工业有限公司

123

金龙牌

XMQ6850AGPHEVD51

混合动力城市客车

235

厦门金龙联合汽车工业有限公司

123

金龙牌

XMQ6850AGPHEVN51

混合动力城市客车

236

厦门金龙旅行车有限公司

124

金旅牌

XML6102JEV10

纯电动客车

237

厦门金龙旅行车有限公司

124

金旅牌

XML6102JEV10C

纯电动城市客车

238

厦门金龙旅行车有限公司

124

金旅牌

XML6102JEV30

纯电动客车

239

厦门金龙旅行车有限公司

124

金旅牌

XML6105JEV20C

纯电动城市客车

240

厦门金龙旅行车有限公司

124

金旅牌

XML6105JEV30C

纯电动城市客车

241

厦门金龙旅行车有限公司

124

金旅牌

XML6105JEV60C

纯电动城市客车

242

厦门金龙旅行车有限公司

124

金旅牌

XML6105JHEVA5C1

混合动力城市客车

243

厦门金龙旅行车有限公司

124

金旅牌

XML6105JHEVA5CN1

混合动力城市客车

244

厦门金龙旅行车有限公司

124

金旅牌

XML6112JEV10

纯电动客车

245

厦门金龙旅行车有限公司

124

金旅牌

XML6112JEV20

纯电动客车

246

厦门金龙旅行车有限公司

124

金旅牌

XML6112JEV30

纯电动客车

247

厦门金龙旅行车有限公司

124

金旅牌

XML6112JEV50

纯电动客车

248

厦门金龙旅行车有限公司

124

金旅牌

XML6112JEV60

纯电动客车

249

厦门金龙旅行车有限公司

124

金旅牌

XML6112JEV70

纯电动客车

250

厦门金龙旅行车有限公司

124

金旅牌

XML6112JHEVA8C

混合动力城市客车

251

厦门金龙旅行车有限公司

124

金旅牌

XML6115JEV20C

纯电动城市客车

252

厦门金龙旅行车有限公司

124

金旅牌

XML6115JEV30C

纯电动城市客车

253

厦门金龙旅行车有限公司

124

金旅牌

XML6115JEV50C

纯电动城市客车

254

厦门金龙旅行车有限公司

124

金旅牌

XML6115JEV60C

纯电动城市客车

255

厦门金龙旅行车有限公司

124

金旅牌

XML6122JEV10

纯电动客车

256

厦门金龙旅行车有限公司

124

金旅牌

XML6122JHEVA8C

混合动力城市客车

257

厦门金龙旅行车有限公司

124

金旅牌

XML6125JEV50C

纯电动城市客车

258

厦门金龙旅行车有限公司

124

金旅牌

XML6125JEV60C

纯电动城市客车

259

厦门金龙旅行车有限公司

124

金旅牌

XML6125JEVB0C

纯电动城市客车

260

厦门金龙旅行车有限公司

124

金旅牌

XML6125JEVC0C

纯电动城市客车

261

厦门金龙旅行车有限公司

124

金旅牌

XML6125JHEVA5C1

混合动力城市客车

262

厦门金龙旅行车有限公司

124

金旅牌

XML6532JEV70

纯电动轻型客车

263

厦门金龙旅行车有限公司

124

金旅牌

XML6532JEV80

纯电动轻型客车

264

厦门金龙旅行车有限公司

124

金旅牌

XML6532JEVA0

纯电动轻型客车

265

厦门金龙旅行车有限公司

124

金旅牌

XML6532JEVD0

纯电动轻型客车

266

厦门金龙旅行车有限公司

124

金旅牌

XML6532JEVF0

纯电动轻型客车

267

厦门金龙旅行车有限公司

124

金旅牌

XML6532JEVG0

纯电动轻型客车

268

厦门金龙旅行车有限公司

124

金旅牌

XML6609JEV10

纯电动客车

269

厦门金龙旅行车有限公司

124

金旅牌

XML6609JEV20

纯电动客车

270

厦门金龙旅行车有限公司

124

金旅牌

XML6609JEV30

纯电动客车

271

厦门金龙旅行车有限公司

124

金旅牌

XML6609JEV50

纯电动客车

272

厦门金龙旅行车有限公司

124

金旅牌

XML6609JEV60

纯电动客车

273

厦门金龙旅行车有限公司

124

金旅牌

XML6609JEV80

纯电动客车

274

厦门金龙旅行车有限公司

124

金旅牌

XML6609JEV90

纯电动客车

275

厦门金龙旅行车有限公司

124

金旅牌

XML6609JEVB0

纯电动客车

276

厦门金龙旅行车有限公司

124

金旅牌

XML6609JEVC0

纯电动客车

277

厦门金龙旅行车有限公司

124

金旅牌

XML6700JEV10C

纯电动城市客车

278

厦门金龙旅行车有限公司

124

金旅牌

XML6700JEV20

纯电动客车

279

厦门金龙旅行车有限公司

124

金旅牌

XML6700JEV30

纯电动客车

280

厦门金龙旅行车有限公司

124

金旅牌

XML6700JEV30C

纯电动城市客车

281

厦门金龙旅行车有限公司

124

金旅牌

XML6700JEV50C

纯电动城市客车

282

厦门金龙旅行车有限公司

124

金旅牌

XML6700JEV80

纯电动客车

283

厦门金龙旅行车有限公司

124

金旅牌

XML6700JEV80C

纯电动城市客车

284

厦门金龙旅行车有限公司

124

金旅牌

XML6700JEV90

纯电动客车

285

厦门金龙旅行车有限公司

124

金旅牌

XML6700JEVA0

纯电动客车

286

厦门金龙旅行车有限公司

124

金旅牌

XML6700JEVA0C

纯电动城市客车

287

厦门金龙旅行车有限公司

124

金旅牌

XML6700JEVG0

纯电动客车

288

厦门金龙旅行车有限公司

124

金旅牌

XML6805JEV20C

纯电动城市客车

289

厦门金龙旅行车有限公司

124

金旅牌

XML6827JEV10

纯电动客车

290

厦门金龙旅行车有限公司

124

金旅牌

XML6827JEV20

纯电动客车

291

厦门金龙旅行车有限公司

124

金旅牌

XML6827JEV30

纯电动客车

292

厦门金龙旅行车有限公司

124

金旅牌

XML6827JHEV15C

混合动力城市客车

293

厦门金龙旅行车有限公司

124

金旅牌

XML6827JHEV18C

混合动力城市客车

294

厦门金龙旅行车有限公司

124

金旅牌

XML6907JEV10

纯电动客车

295

中通客车控股股份有限公司

125

中通牌

LCK6106PHEVC

插电式混合动力城市客车

296

中通客车控股股份有限公司

125

中通牌

LCK6107PHEVC

插电式混合动力城市客车

297

中通客车控股股份有限公司

125

中通牌

LCK6107PHEVNC

插电式混合动力城市客车

298

中通客车控股股份有限公司

125

中通牌

LCK6108EVG4

纯电动城市客车

299

中通客车控股股份有限公司

125

中通牌

LCK6108EVG5

纯电动城市客车

300

中通客车控股股份有限公司

125

中通牌

LCK6118EV

纯电动客车

301

中通客车控股股份有限公司

125

中通牌

LCK6122EVG

纯电动城市客车

302

中通客车控股股份有限公司

125

中通牌

LCK6127PHEVC

插电式混合动力城市客车

303

中通客车控股股份有限公司

125

中通牌

LCK6127PHEVNC

插电式混合动力城市客车

304

中通客车控股股份有限公司

125

中通牌

LCK6600BEV1

纯电动客车

305

中通客车控股股份有限公司

125

中通牌

LCK6609EV3

纯电动客车

306

中通客车控股股份有限公司

125

中通牌

LCK6609EV5

纯电动客车

307

中通客车控股股份有限公司

125

中通牌

LCK6663EVG

纯电动城市客车

308

中通客车控股股份有限公司

125

中通牌

LCK6808EV2

纯电动客车

309

中通客车控股股份有限公司

125

中通牌

LCK6809EVG11

纯电动城市客车

310

中通客车控股股份有限公司

125

中通牌

LCK6809EVG12

纯电动城市客车

311

中通客车控股股份有限公司

125

中通牌

LCK6820PHENV

混合动力城市客车

312

中通客车控股股份有限公司

125

中通牌

LCK6820PHEV

插电式混合动力客车

313

中通客车控股股份有限公司

125

中通牌

LCK6820PHEVG

混合动力城市客车

314

中通客车控股股份有限公司

125

中通牌

LCK6850PHEVNG

混合动力城市客车

315

海马轿车有限公司

128

海马牌

HMA7004S30BEV

纯电动轿车

316

海马轿车有限公司

128

海马牌

HMA7005S30BEV

纯电动轿车

317

上海申龙客车有限公司

129

申龙牌

SLK6663ULE0BEVS1

纯电动城市客车

318

江苏九龙汽车制造有限公司

141

大马牌

HKL6600BEV5

纯电动客车

319

江苏九龙汽车制造有限公司

141

大马牌

HKL6600BEV6

纯电动客车

320

江苏九龙汽车制造有限公司

141

大马牌

HKL6600BEVB1

纯电动客车

321

江苏九龙汽车制造有限公司

141

大马牌

HKL6601BEV

纯电动客车

322

南京金龙客车制造有限公司

142

开沃牌

NJL6100BEV1

纯电动城市客车

323

南京金龙客车制造有限公司

142

开沃牌

NJL6100BEV13

纯电动城市客车

324

南京金龙客车制造有限公司

142

开沃牌

NJL6100BEV2

纯电动城市客车

325

南京金龙客车制造有限公司

142

开沃牌

NJL6100BEV3

纯电动城市客车

326

南京金龙客车制造有限公司

142

开沃牌

NJL6100BEV5

纯电动城市客车

327

南京金龙客车制造有限公司

142

开沃牌

NJL6100BEV7

纯电动城市客车

328

南京金龙客车制造有限公司

142

开沃牌

NJL6107BEV

纯电动客车

329

南京金龙客车制造有限公司

142

开沃牌

NJL6107BEV1

纯电动客车

330

南京金龙客车制造有限公司

142

开沃牌

NJL6107BEV2

纯电动客车

331

南京金龙客车制造有限公司

142

开沃牌

NJL6117BEV10

纯电动客车

332

南京金龙客车制造有限公司

142

开沃牌

NJL6117BEV11

纯电动客车

333

南京金龙客车制造有限公司

142

开沃牌

NJL6117BEV12

纯电动客车

334

南京金龙客车制造有限公司

142

开沃牌

NJL6117BEV4

纯电动客车

335

南京金龙客车制造有限公司

142

开沃牌

NJL6117BEV7

纯电动客车

336

南京金龙客车制造有限公司

142

开沃牌

NJL6117BEV8

纯电动客车

337

南京金龙客车制造有限公司

142

开沃牌

NJL6117BEV9

纯电动客车

338

南京金龙客车制造有限公司

142

开沃牌

NJL6118BEV1

纯电动客车

339

南京金龙客车制造有限公司

142

开沃牌

NJL6118BEV4

纯电动客车

340

南京金龙客车制造有限公司

142

开沃牌

NJL6118BEV5

纯电动客车

341

南京金龙客车制造有限公司

142

开沃牌

NJL6118BEV7

纯电动客车

342

南京金龙客车制造有限公司

142

开沃牌

NJL6118BEV9

纯电动客车

343

南京金龙客车制造有限公司

142

开沃牌

NJL6120BEV

纯电动客车

344

南京金龙客车制造有限公司

142

开沃牌

NJL6129BEV12

纯电动城市客车

345

南京金龙客车制造有限公司

142

开沃牌

NJL6129BEV3

纯电动城市客车

346

南京金龙客车制造有限公司

142

开沃牌

NJL6129BEV5

纯电动城市客车

347

南京金龙客车制造有限公司

142

开沃牌

NJL6129BEV8

纯电动城市客车

348

南京金龙客车制造有限公司

142

开沃牌

NJL6129BEV9

纯电动城市客车

349

南京金龙客车制造有限公司

142

开沃牌

NJL6600BEV24

纯电动客车

350

南京金龙客车制造有限公司

142

开沃牌

NJL6600BEV25

纯电动客车

351

南京金龙客车制造有限公司

142

开沃牌

NJL6600BEV28

纯电动客车

352

南京金龙客车制造有限公司

142

开沃牌

NJL6600BEV30

纯电动客车

353

南京金龙客车制造有限公司

142

开沃牌

NJL6600BEV31

纯电动城市客车

354

南京金龙客车制造有限公司

142

开沃牌

NJL6600BEV32

纯电动客车

355

南京金龙客车制造有限公司

142

开沃牌

NJL6600BEV41

纯电动客车

356

南京金龙客车制造有限公司

142

开沃牌

NJL6600BEV45

纯电动客车

357

南京金龙客车制造有限公司

142

开沃牌

NJL6600BEV49

纯电动客车

358

南京金龙客车制造有限公司

142

开沃牌

NJL6601BEV5

纯电动客车

359

南京金龙客车制造有限公司

142

开沃牌

NJL6680BEV16

纯电动城市客车

360

南京金龙客车制造有限公司

142

开沃牌

NJL6680BEV20

纯电动城市客车

361

南京金龙客车制造有限公司

142

开沃牌

NJL6680BEV8

纯电动城市客车

362

南京金龙客车制造有限公司

142

开沃牌

NJL6706BEV8

纯电动客车

363

南京金龙客车制造有限公司

142

开沃牌

NJL6706BEV9

纯电动客车

364

南京金龙客车制造有限公司

142

开沃牌

NJL6820BEV

纯电动客车

365

南京金龙客车制造有限公司

142

开沃牌

NJL6820BEV1

纯电动客车

366

南京金龙客车制造有限公司

142

开沃牌

NJL6820BEV3

纯电动客车

367

南京金龙客车制造有限公司

142

开沃牌

NJL6820BEVG

纯电动城市客车

368

南京金龙客车制造有限公司

142

开沃牌

NJL6820BEVG1

纯电动城市客车

369

南京金龙客车制造有限公司

142

开沃牌

NJL6859BEV

纯电动城市客车

370

南京金龙客车制造有限公司

142

开沃牌

NJL6859BEV15

纯电动城市客车

371

南京金龙客车制造有限公司

142

开沃牌

NJL6859BEV18

纯电动城市客车

372

南京金龙客车制造有限公司

142

开沃牌

NJL6859BEV7

纯电动城市客车

373

南京金龙客车制造有限公司

142

开沃牌

NJL6859BEV8

纯电动城市客车

374

南京金龙客车制造有限公司

142

开沃牌

NJL6859BEV9

纯电动城市客车

375

山西皇城相府宇航汽车制造有限公司

(四)01

山西牌

SXK6601TBEV3

纯电动客车

376

山西皇城相府宇航汽车制造有限公司

(四)01

山西牌

SXK6800TBEV

纯电动客车

377

黑龙江龙华汽车有限公司

(八)16

黑龙江牌

HLJ6122PHEV

混合动力城市客车

378

黑龙江龙华汽车有限公司

(八)16

黑龙江牌

HLJ6681BEV

纯电动城市客车

379

上海万象汽车制造有限公司

(九)26

象牌

SXC6110CBEV

纯电动客车

380

上海万象汽车制造有限公司

(九)26

象牌

SXC6110CBEV1

纯电动客车

381

上海万象汽车制造有限公司

(九)26

象牌

SXC6110GBEV2

纯电动城市客车

382

上海万象汽车制造有限公司

(九)26

象牌

SXC6110GBEV3

纯电动城市客车

383

上海万象汽车制造有限公司

(九)26

象牌

SXC6120GBEV3

纯电动城市客车

384

上海万象汽车制造有限公司

(九)26

象牌

SXC6750GBEV1

纯电动城市客车

385

上海万象汽车制造有限公司

(九)26

象牌

SXC6940GBEV

纯电动城市客车

386

上海万象汽车制造有限公司

(九)26

象牌

SXC6940GBEV1

纯电动城市客车

387

江苏常隆客车有限公司

(十)17

常隆牌

YS6103GBEV

纯电动城市客车

388

江苏常隆客车有限公司

(十)17

常隆牌

YS6104GBEV

纯电动城市客车

389

江苏常隆客车有限公司

(十)17

常隆牌

YS6105BEV

纯电动客车

390

江苏常隆客车有限公司

(十)17

常隆牌

YS6107BEV

纯电动客车

391

江苏常隆客车有限公司

(十)17

常隆牌

YS6107GBEV

纯电动城市客车

392

江苏常隆客车有限公司

(十)17

常隆牌

YS6109GBEV

纯电动城市客车

393

江苏常隆客车有限公司

(十)17

常隆牌

YS6123GBEV

纯电动城市客车

394

江苏常隆客车有限公司

(十)17

常隆牌

YS6124GBEV

纯电动城市客车

395

江苏常隆客车有限公司

(十)17

常隆牌

YS6126BEV

纯电动客车

396

江苏常隆客车有限公司

(十)17

常隆牌

YS6126GBEV

纯电动城市客车

397

江苏常隆客车有限公司

(十)17

常隆牌

YS6127BEV

纯电动客车

398

江苏常隆客车有限公司

(十)17

常隆牌

YS6127GBEV

纯电动城市客车

399

江苏常隆客车有限公司

(十)17

常隆牌

YS6700BEV

纯电动客车

400

江苏常隆客车有限公司

(十)17

常隆牌

YS6757GBEV

纯电动城市客车

401

江苏常隆客车有限公司

(十)17

常隆牌

YS6830GBEV

纯电动城市客车

402

江苏常隆客车有限公司

(十)17

常隆牌

YS6832GBEV

纯电动城市客车

403

江苏常隆客车有限公司

(十)17

常隆牌

YS6834GBEV

纯电动城市客车

404

江苏常隆客车有限公司

(十)17

常隆牌

YS6836GBEV

纯电动城市客车

405

江苏陆地方舟新能源电动汽车有限公司

(十)28

陆地方舟牌

RQ6100GEVH3

纯电动城市客车

406

江苏陆地方舟新能源电动汽车有限公司

(十)28

陆地方舟牌

RQ6100GEVH5

纯电动城市客车

407

江苏陆地方舟新能源电动汽车有限公司

(十)28

陆地方舟牌

RQ6100GEVH7

纯电动城市客车

408

江苏陆地方舟新能源电动汽车有限公司

(十)28

陆地方舟牌

RQ6100GEVH8

纯电动城市客车

409

江苏陆地方舟新能源电动汽车有限公司

(十)28

陆地方舟牌

RQ6120GEVH0

纯电动城市客车

410

江苏陆地方舟新能源电动汽车有限公司

(十)28

陆地方舟牌

RQ6120GEVH2

纯电动城市客车

411

江苏陆地方舟新能源电动汽车有限公司

(十)28

陆地方舟牌

RQ6120GEVH3

纯电动城市客车

412

江苏陆地方舟新能源电动汽车有限公司

(十)28

陆地方舟牌

RQ6120GEVH4

纯电动城市客车

413

江苏陆地方舟新能源电动汽车有限公司

(十)28

陆地方舟牌

RQ6700XEVH12

纯电动客车

414

江苏陆地方舟新能源电动汽车有限公司

(十)28

陆地方舟牌

RQ6700XEVH7

纯电动客车

415

江苏陆地方舟新能源电动汽车有限公司

(十)28

陆地方舟牌

RQ6850GEVH1

纯电动城市客车

416

安徽星凯龙客车有限公司

(十二)18

星凯龙牌

HFX6100KEV09

纯电动客车

417

安徽星凯龙客车有限公司

(十二)18

星凯龙牌

HFX6120KEV07

纯电动客车

418

安徽星凯龙客车有限公司

(十二)18

星凯龙牌

HFX6121GEV03

纯电动城市客车

419

安徽星凯龙客车有限公司

(十二)18

星凯龙牌

HFX6600KEV05

纯电动客车

420

安徽星凯龙客车有限公司

(十二)18

星凯龙牌

HFX6600KEV10

纯电动客车

421

安徽星凯龙客车有限公司

(十二)18

星凯龙牌

HFX6601KEV05

纯电动客车

422

安徽星凯龙客车有限公司

(十二)18

星凯龙牌

HFX6601KEV10

纯电动客车

423

安徽星凯龙客车有限公司

(十二)18

星凯龙牌

HFX6604KEV10

纯电动客车

424

安徽星凯龙客车有限公司

(十二)18

星凯龙牌

HFX6701KEV08

纯电动客车

425

江西凯马百路佳客车有限公司

(十四)03

江西牌

JXK6121BEV

纯电动城市客车

426

烟台舒驰客车有限责任公司

(十五)18

舒驰牌

YTK6118EV2

纯电动客车

427

中国重汽集团济南豪沃客车有限公司

(十五)19

黄河牌

JK6106GBEV2

纯电动城市客车

428

中国重汽集团济南豪沃客车有限公司

(十五)19

黄河牌

JK6856GBEV

纯电动城市客车

429

中国重汽集团济南豪沃客车有限公司

(十五)19

黄河牌

JK6856GBEV2

纯电动城市客车

430

山东沂星电动汽车有限公司

(十五)25

飞燕牌

SDL6100EVL

纯电动旅游客车

431

山东沂星电动汽车有限公司

(十五)25

飞燕牌

SDL6120EVG1

纯电动城市客车

432

山东沂星电动汽车有限公司

(十五)25

飞燕牌

SDL6120EVG4

纯电动城市客车

433

山东沂星电动汽车有限公司

(十五)25

飞燕牌

SDL6120EVG5

纯电动城市客车

434

山东沂星电动汽车有限公司

(十五)25

飞燕牌

SDL6122EVG

纯电动城市客车

435

山东沂星电动汽车有限公司

(十五)25

飞燕牌

SDL6830EVG

纯电动城市客车

436

山东沂星电动汽车有限公司

(十五)25

飞燕牌

SDL6832EVG

纯电动城市客车

437

东风扬子江汽车(武汉)有限责任公司

(十七)48

扬子江牌

WG6100BEVH

纯电动城市客车

438

东风扬子江汽车(武汉)有限责任公司

(十七)48

扬子江牌

WG6101BEVH

纯电动城市客车

439

东风扬子江汽车(武汉)有限责任公司

(十七)48

扬子江牌

WG6120BEVHM1

纯电动城市客车

440

东风扬子江汽车(武汉)有限责任公司

(十七)48

扬子江牌

WG6120BEVHM2

纯电动城市客车

441

东风扬子江汽车(武汉)有限责任公司

(十七)48

扬子江牌

WG6610BEVH

纯电动城市客车

442

东风扬子江汽车(武汉)有限责任公司

(十七)48

扬子江牌

WG6611BEVQ

纯电动客车

443

东风扬子江汽车(武汉)有限责任公司

(十七)48

扬子江牌

WG6612BEVZ

纯电动客车

444

东风扬子江汽车(武汉)有限责任公司

(十七)48

扬子江牌

WG6650BEVH

纯电动城市客车

445

东风扬子江汽车(武汉)有限责任公司

(十七)48

扬子江牌

WG6660BEVH

纯电动城市客车

446

东风扬子江汽车(武汉)有限责任公司

(十七)48

扬子江牌

WG6702BEVH

纯电动客车

447

东风扬子江汽车(武汉)有限责任公司

(十七)48

扬子江牌

WG6820BEVH

纯电动城市客车

448

东风扬子江汽车(武汉)有限责任公司

(十七)48

扬子江牌

WG6821BEVH

纯电动客车

449

湖南南车时代电动汽车股份有限公司

(十八)23

南车时代牌

TEG6106EHEV08

混合动力城市客车

450

湖南南车时代电动汽车股份有限公司

(十八)23

南车时代牌

TEG6106EHEV11

混合动力城市客车

451

湖南南车时代电动汽车股份有限公司

(十八)23

南车时代牌

TEG6106EHEVN06

混合动力城市客车

452

湖南南车时代电动汽车股份有限公司

(十八)23

南车时代牌

TEG6106HEV24

混合动力城市客车

453

湖南南车时代电动汽车股份有限公司

(十八)23

南车时代牌

TEG6129EHEV04

混合动力城市客车

454

湖南南车时代电动汽车股份有限公司

(十八)23

南车时代牌

TEG6129EHEV08

混合动力城市客车

455

湖南南车时代电动汽车股份有限公司

(十八)23

南车时代牌

TEG6600EV02

纯电动客车

456

湖南南车时代电动汽车股份有限公司

(十八)23

南车时代牌

TEG6820BEV01

纯电动城市客车

457

湖南南车时代电动汽车股份有限公司

(十八)23

南车时代牌

TEG6851BEV01

纯电动城市客车

458

珠海广通汽车有限公司

(十九)28

广通牌

GTQ6105BEVB1

纯电动城市客车

459

珠海广通汽车有限公司

(十九)28

广通牌

GTQ6701BEV1

纯电动旅游客车

460

成都客车股份有限公司

(二十二)10

蜀都牌

CDK6113CEDHEV

混合动力城市客车

461

成都客车股份有限公司

(二十二)10

蜀都牌

CDK6125CBEV1

纯电动城市客车

462

成都客车股份有限公司

(二十二)10

蜀都牌

CDK6604BEV

纯电动客车

463

奇瑞万达贵州客车股份有限公司

(二十三)06

万达牌

WD6105EHEV

混合动力城市客车

464

奇瑞万达贵州客车股份有限公司

(二十三)06

万达牌

WD6115EHEV

混合动力城市客车

465

奇瑞万达贵州客车股份有限公司

(二十三)06

万达牌

WD6125EHEV

混合动力城市客车

466

奇瑞万达贵州客车股份有限公司

(二十三)06

万达牌

WD6602BEV

纯电动客车

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

【其他文章推薦】

※USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※評比前十大台北網頁設計、台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

※台灣海運大陸貨務運送流程

※兩岸物流進出口一站式服務

[springboot 開發單體web shop] 6. 商品分類和輪播廣告展示

目錄

商品分類&輪播廣告

因最近又被困在了OSGI技術POC,更新進度有點慢,希望大家不要怪罪哦。

我們實現了登錄之後前端的展示,如:

接着,我們來實現左側分類欄目的功能。

商品分類|ProductCategory

從上圖我們可以看出,商品的分類其實是有層級關係的,而且這種關係一般都是無限層級。在我們的實現中,為了效果的展示,我們僅僅是展示3級分類,在大多數的中小型電商系統中,三級分類完全足夠應對SKU的分類。

需求分析

先來分析分類都包含哪些元素,以jd為例:

  • logo(logo) 有的分類文字前面會有小標
  • 分類展示主圖(img_url)
  • 主標題(title)
  • 副標題/Slogan
  • 圖片跳轉地址(img_link_url)– 大多數時候我們點擊分類都會分類Id跳轉到固定的分類商品列表展示頁面,但是在一些特殊的場景,比如我們要做一個活動,希望可以點擊某一個分類的主圖直接定位到活動頁面,這個url就可以使用了。
  • 上級分類(parent_id)
  • 背景色(bg_color)
  • 順序(sort)
  • 當前分類級別(type)

開發梳理

在上一小節,我們簡單分析了一下要實現商品分類的一些points,那麼我們最好在每次拿到需求【開發之前】,對需求進行拆解,然後分解開發流程,這樣可以保證我們更好的理解需求,以及在開發之前發現一部分不合理的需求,並且如果需求設計不合理的話,開發人員完全有權,也有責任告知PM。大家的終極目的都是為了我們做的產品更加合理,好用,受歡迎!

  • 首次展示,僅僅讀取一級分類(Root)
  • 根據一級分類查詢二三級子分類

編碼實現

查詢一級分類

Service實現

1.在com.liferunner.service中創建service 接口ICategoryService.java, 編寫查詢所有一級分類的方法getAllRootCategorys,如下:

package com.liferunner.service;
import com.liferunner.dto.CategoryResponseDTO;
import com.liferunner.dto.SecondSubCategoryResponseDTO;
import java.util.List;
/**
 * ICategoryService for : 分類service
 *
 * @author <a href="mailto:magicianisaac@gmail.com">Isaac.Zhang | 若初</a>
 * @since 2019/11/13
 */
public interface ICategoryService {
    /**
     * 獲取所有有效的一級分類(根節點)
     *
     * @return
     */
    List<CategoryResponseDTO> getAllRootCategorys();
}

2.編寫實現類com.liferunner.service.ICategoryService.java

@Service
@Slf4j
public class CategorySericeImpl implements ICategoryService {
    @Autowired
    private CategoryMapper categoryMapper;
    
    @Override
    public List<CategoryResponseDTO> getAllRootCategorys() {
        Example example = new Example(Category.class);
        val conditions = example.createCriteria();
        conditions.andEqualTo("type", CategoryTypeEnum.ROOT.type);
        val categoryList = this.categoryMapper.selectByExample(example);
        //聲明返回對象
        List<CategoryResponseDTO> categoryResponseDTOS = new ArrayList<>();
        if (!CollectionUtils.isEmpty(categoryList)) {
            //賦值
            CategoryResponseDTO dto;
            for (Category category : categoryList) {
                dto = new CategoryResponseDTO();
                BeanUtils.copyProperties(category, dto);
                categoryResponseDTOS.add(dto);
            }
        }
        return categoryResponseDTOS;
    }
}

上述代碼很好理解,創建tk.mybatis.mapper.entity.Example,將條件傳入,然後使用通用Mapper查詢到type=1的一級分類,接着將查到的對象列錶轉換為DTO對象列表。

Controller實現

一般情況下,此類查詢都會出現在網站的首頁,因此我們來創建一個com.liferunner.api.controller.IndexController,並對外暴露一個查詢一級分類的接口:

package com.liferunner.api.controller;

import com.liferunner.service.ICategoryService;
import com.liferunner.service.IProductService;
import com.liferunner.service.ISlideAdService;
import com.liferunner.utils.JsonResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import java.util.Collections;
import lombok.extern.slf4j.Slf4j;
import lombok.val;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
/**
 * IndexController for : 首頁controller
 *
 * @author <a href="mailto:magicianisaac@gmail.com">Isaac.Zhang | 若初</a>
 * @since 2019/11/12
 */
@RestController
@RequestMapping("/index")
@Api(value = "首頁信息controller", tags = "首頁信息接口API")
@Slf4j
public class IndexController {
    @Autowired
    private ICategoryService categoryService;

    @GetMapping("/rootCategorys")
    @ApiOperation(value = "查詢一級分類", notes = "查詢一級分類")
    public JsonResponse findAllRootCategorys() {
        log.info("============查詢一級分類==============");
        val categoryResponseDTOS = this.categoryService.getAllRootCategorys();
        if (CollectionUtils.isEmpty(categoryResponseDTOS)) {
            log.info("============未查詢到任何分類==============");
            return JsonResponse.ok(Collections.EMPTY_LIST);
        }
        log.info("============一級分類查詢result:{}==============", categoryResponseDTOS);
        return JsonResponse.ok(categoryResponseDTOS);
    }
}
Test API

編寫完成之後,我們需要對我們的代碼進行測試驗證,還是通過使用RestService插件來實現,當然,大家也可以通過Postman來測試。

{
  "status": 200,
  "message": "OK",
  "data": [
    {
      "id": 1,
      "name": "煙酒",
      "type": 1,
      "parentId": 0,
      "logo": "img/cake.png",
      "slogan": "吸煙受害健康",
      "catImage": "http://www.life-runner.com/shop/category/cake.png",
      "bgColor": "#fe7a65"
    },
    {
      "id": 2,
      "name": "服裝",
      "type": 1,
      "parentId": 0,
      "logo": "img/cookies.png",
      "slogan": "我選擇我喜歡",
      "catImage": "http://www.life-runner.com/shop/category/cookies.png",
      "bgColor": "#f59cec"
    },
    {
      "id": 3,
      "name": "鞋帽",
      "type": 1,
      "parentId": 0,
      "logo": "img/meat.png",
      "slogan": "飛一般的感覺",
      "catImage": "http://www.life-runner.com/shop/category/meat.png",
      "bgColor": "#b474fe"
    }
  ],
  "ok": true
}

根據一級分類查詢子分類

因為根據一級id查詢子分類的時候,我們是在同一張表中做自連接查詢,因此,通用mapper已經不適合我們的使用,因此我們需要自定義mapper來實現我們的需求。

自定義Mybatis Mapper實現

在之前的編碼中,我們都是使用的插件幫我們實現的通用Mapper,但是這種查詢只能處理簡單的單表CRUD,一旦我們需要SQL 包含一部分邏輯處理的時候,那就必須得自己來編寫了,let’s code.
1.在項目mscx-shop-mapper中,創建一個新的custom package,在該目錄下創建自定義mappercom.liferunner.custom.CategoryCustomMapper。

public interface CategoryCustomMapper {
    List<SecondSubCategoryResponseDTO> getSubCategorys(Integer parentId);
}

2.resources目錄下創建目錄mapper.custom,以及創建和上面的接口相同名稱的XML文件mapper/custom/CategoryCustomMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.liferunner.custom.CategoryCustomMapper">
    <resultMap id="subCategoryDTO" type="com.liferunner.dto.SecondSubCategoryResponseDTO">
        <id column="id" jdbcType="INTEGER" property="id"/>
        <result column="name" jdbcType="VARCHAR" property="name"/>
        <result column="type" jdbcType="INTEGER" property="type"/>
        <result column="parentId" jdbcType="INTEGER" property="parentId"/>
        <collection property="thirdSubCategoryResponseDTOList" ofType="com.liferunner.dto.ThirdSubCategoryResponseDTO">
            <id column="subId" jdbcType="INTEGER" property="subId"/>
            <result column="subName" jdbcType="VARCHAR" property="subName"/>
            <result column="subType" jdbcType="INTEGER" property="subType"/>
            <result column="subParentId" jdbcType="INTEGER" property="subParentId"/>
        </collection>
    </resultMap>
    <select id="getSubCategorys" resultMap="subCategoryDTO" parameterType="INTEGER">
        SELECT p.id as id,p.`name` as `name`,p.`type` as `type`,p.father_id as parentId,
        c.id as subId,c.`name` as subName,c.`type` as subType,c.parent_id as subParentId
        FROM category p
        LEFT JOIN category c
        ON p.id = c.parent_id
        WHERE p.parent_id = ${parentId};
    </select>
</mapper>

TIPS
上述創建的package,一定要在項目的啟動類com.liferunner.api.ApiApplication中修改@MapperScan(basePackages = { "com.liferunner.mapper", "com.liferunner.custom"}),如果不把我們的custom package加上,會造成掃描不到而報錯。

在上面的xml中,我們定義了兩個DTO對象,分別用來處理二級和三級分類的DTO,實現如下:

@Data
@ToString
public class SecondSubCategoryResponseDTO {
    /**
     * 主鍵
     */
    private Integer id;

    /**
     * 分類名稱
     */
    private String name;

    /**
     * 分類類型
     1:一級大分類
     2:二級分類
     3:三級小分類
     */
    private Integer type;

    /**
     * 父id
     */
    private Integer parentId;

    List<ThirdSubCategoryResponseDTO> thirdSubCategoryResponseDTOList;
}
---
    
@Data
@ToString
public class ThirdSubCategoryResponseDTO {
    /**
     * 主鍵
     */
    private Integer subId;

    /**
     * 分類名稱
     */
    private String subName;

    /**
     * 分類類型
     1:一級大分類
     2:二級分類
     3:三級小分類
     */
    private Integer subType;

    /**
     * 父id
     */
    private Integer subParentId;
}
Service實現

編寫完自定義mapper之後,我們就可以繼續編寫service了,在com.liferunner.service.ICategoryService中新增一個方法:getAllSubCategorys(parentId).如下:

public interface ICategoryService {
    ...
    /**
     * 根據一級分類獲取子分類
     *
     * @param parentId 一級分類id
     * @return 子分類list
     */
    List<SecondSubCategoryResponseDTO> getAllSubCategorys(Integer parentId);
}

在com.liferunner.service.impl.CategorySericeImpl實現上述方法:

@Service
@Slf4j
public class CategorySericeImpl implements ICategoryService {
    @Autowired
    private CategoryMapper categoryMapper;

    @Autowired
    private CategoryCustomMapper categoryCustomMapper;
    ...
    @Override
    @Transactional(propagation = Propagation.SUPPORTS)
    public List<SecondSubCategoryResponseDTO> getAllSubCategorys(Integer parentId) {
        return this.categoryCustomMapper.getSubCategorys(parentId);
    }
}
Controller實現
@RestController
@RequestMapping("/index")
@Api(value = "首頁信息controller", tags = "首頁信息接口API")
@Slf4j
public class IndexController {
    @Autowired
    private ICategoryService categoryService;
    ...
    @GetMapping("/subCategorys/{parentId}")
    @ApiOperation(value = "查詢子分類", notes = "根據一級分類id查詢子分類")
    public JsonResponse findAllSubCategorys(
            @ApiParam(name = "parentId", value = "一級分類id", required = true)
            @PathVariable Integer parentId) {
        log.info("============查詢id = {}的子分類==============", parentId);
        val categoryResponseDTOS = this.categoryService.getAllSubCategorys(parentId);
        if (CollectionUtils.isEmpty(categoryResponseDTOS)) {
            log.info("============未查詢到任何分類==============");
            return JsonResponse.ok(Collections.EMPTY_LIST);
        }
        log.info("============子分類查詢result:{}==============", categoryResponseDTOS);
        return JsonResponse.ok(categoryResponseDTOS);
    }
}
Test API
{
  "status": 200,
  "message": "OK",
  "data": [
    {
      "id": 11,
      "name": "國產",
      "type": 2,
      "parentId": 1,
      "thirdSubCategoryResponseDTOList": [
        {
          "subId": 37,
          "subName": "中華",
          "subType": 3,
          "subParentId": 11
        },
        {
          "subId": 38,
          "subName": "冬蟲夏草",
          "subType": 3,
          "subParentId": 11
        },
        {
          "subId": 39,
          "subName": "南京",
          "subType": 3,
          "subParentId": 11
        },
        {
          "subId": 40,
          "subName": "雲煙",
          "subType": 3,
          "subParentId": 11
        }
      ]
    },
    {
      "id": 12,
      "name": "外煙",
      "type": 2,
      "parentId": 1,
      "thirdSubCategoryResponseDTOList": [
        {
          "subId": 44,
          "subName": "XXXXX",
          "subType": 3,
          "subParentId": 12
        },
        {
          "subId": 45,
          "subName": "RRRRR",
          "subType": 3,
          "subParentId": 12
        }
      ]
    }
  ],
  "ok": true
}

以上我們就已經實現了和jd類似的商品分類的功能實現。

輪播廣告|SlideAD

需求分析

這個就是jd或者tb首先的最頂部的廣告圖片是一樣的,每隔1秒自動切換圖片。接下來我們分析一下輪播圖中都包含哪些信息:

  • 圖片(img_url)是最基本的
  • 圖片跳轉連接(img_link_url),這個是在我們點擊這個圖片的時候需要跳轉到的頁面
  • 有的可以直接跳轉到商品詳情頁面
  • 有的可以直接跳轉到某一分類商品列表頁面
  • 輪播圖的播放順序(sort)
  • …

開發梳理

直接查詢出所有的有效的輪播圖片,並且進行排序。

編碼實現

Service 實現

和商品分類實現一樣,在mscx-shop-service中創建com.liferunner.service.ISlideAdService並實現,代碼如下:

public interface ISlideAdService {
    /**
     * 查詢所有可用廣告並排序
     * @param isShow
     * @return
     */
    List<SlideAdResponseDTO> findAll(Integer isShow, String sortRanking);
}
@Service
@Slf4j
public class SlideAdServiceImpl implements ISlideAdService {

    // 注入mapper
    private final SlideAdsMapper slideAdsMapper;

    @Autowired
    public SlideAdServiceImpl(SlideAdsMapper slideAdsMapper) {
        this.slideAdsMapper = slideAdsMapper;
    }

    @Override
    public List<SlideAdResponseDTO> findAll(Integer isShow, String sortRanking) {
        Example example = new Example(SlideAds.class);
        //設置排序
        if (StringUtils.isBlank(sortRanking)) {
            example.orderBy("sort").asc();
        } else {
            example.orderBy("sort").desc();
        }
        val conditions = example.createCriteria();
        conditions.andEqualTo("isShow", isShow);
        val slideAdsList = this.slideAdsMapper.selectByExample(example);
        //聲明返回對象
        List<SlideAdResponseDTO> slideAdResponseDTOList = new ArrayList<>();
        if (!CollectionUtils.isEmpty(slideAdsList)) {
            //賦值
            SlideAdResponseDTO dto;
            for (SlideAds slideAds : slideAdsList) {
                dto = new SlideAdResponseDTO();
                BeanUtils.copyProperties(slideAds, dto);
                slideAdResponseDTOList.add(dto);
            }
        }
        return slideAdResponseDTOList;
    }
}

從上述可以看到,這裏我使用的是構造函數注入SlideAdsMapper,其餘代碼單表查詢沒什麼特別的,根據條件查詢輪播圖,並返回結果,返回的對象是com.liferunner.dto.SlideAdResponseDTO列表,代碼如下:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@ApiModel(value = "輪播廣告返回DTO", description = "輪播廣告返回DTO")
public class SlideAdResponseDTO{
    /**
     * 主鍵
     */
    private String id;

    /**
     * 圖片地址
     */
    private String imageUrl;

    /**
     *  背景顏色
     */
    private String backgroundColor;

    /**
     * 商品id
     */
    private String productId;

    /**
     * 商品分類id
     */
    private String catId;

    /**
     * 圖片跳轉URL
     */
    private String imageLinkUrl;

    /**
     * 輪播圖類型 用於判斷,可以根據商品id或者分類進行頁面跳轉,1:商品 2:分類 3:鏈接url
     */
    private Integer type;

    /**
     * 輪播圖展示順序 輪播圖展示順序,從小到大
     */
    private Integer sort;

    /**
     * 是否展示 是否展示,1:展示    0:不展示
     */
    private Integer isShow;

    /**
     * 創建時間 創建時間
     */
    private Date createTime;

    /**
     * 更新時間 更新
     */
    private Date updateTime;
}

Controller實現

在com.liferunner.api.controller.IndexController中,新添加一個查詢輪播圖API,代碼如下:

    @Autowired
    private ISlideAdService slideAdService;

    @GetMapping("/slideAds")
    @ApiOperation(value = "查詢輪播廣告", notes = "查詢輪播廣告接口")
    public JsonResponse findAllSlideList() {
        log.info("============查詢所有輪播廣告,isShow={},sortRanking={}=============="
                , 1, "desc");
        val slideAdsList = this.slideAdService.findAll(1, "desc");
        if (CollectionUtils.isEmpty(slideAdsList)) {
            log.info("============未查詢到任何輪播廣告==============");
            return JsonResponse.ok(Collections.EMPTY_LIST);
        }
        log.info("============輪播廣告查詢result:{}=============="
                , slideAdsList);
        return JsonResponse.ok(slideAdsList);
    }

Test API

{
  "status": 200,
  "message": "OK",
  "data": [
    {
      "id": "slide-100002",
      "imageUrl": "http://www.life-runner.com/2019/11/CpoxxF0ZmH6AeuRrAAEZviPhyQ0768.png",
      "backgroundColor": "#55be59",
      "productId": "",
      "catId": "133",
      "type": 2,
      "sort": 2,
      "isShow": 1,
      "createTime": "2019-10-11T21:33:01.000+0000",
      "updateTime": "2019-10-11T21:33:02.000+0000"
    },
    {
      "id": "slide-100003",
      "imageUrl": "http://www.life-runner.com/2019/11/CpoxxF0ZmHuAPlXvAAFe-H5_-Nw961.png",
      "backgroundColor": "#ff9801",
      "productId": "y200008",
      "catId": "",
      "type": 1,
      "sort": 1,
      "isShow": 1,
      "createTime": "2019-10-11T21:33:01.000+0000",
      "updateTime": "2019-10-11T21:33:02.000+0000"
    }
  ],
  "ok": true
}

福利講解

在我們的實現代碼中,有心的同學可以看到,我使用了3種不同的Bean注入方式:

  • 屬性注入
    @Autowired
    private ISlideAdService slideAdService;
  • 構造函數注入
    // 注入mapper
    private final SlideAdsMapper slideAdsMapper;

    @Autowired
    public SlideAdServiceImpl(SlideAdsMapper slideAdsMapper) {
        this.slideAdsMapper = slideAdsMapper;
    }
  • Lombok插件注入(本質也是構造器注入,代碼會動態生成。)
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ProductServiceImpl implements IProductService {
    // RequiredArgsConstructor 構造器注入
    private final ProductCustomMapper productCustomMapper;
    private final ProductsMapper productsMapper;
    ...
}

那麼,這幾種注入都有什麼區別呢?首先我們下了解一下Spring的注入是干什麼的?

Spring提出了依賴注入的思想,即依賴類不由程序員實例化,而是通過Spring容器幫我們new指定實例並且將實例注入到需要該對象的類中。
依賴注入的另一種說法是”控制反轉”。通俗的理解是:平常我們new一個實例,這個實例的控制權是我們程序員, 而控制反轉是指new實例工作不由我們程序員來做而是交給Spring容器來做。

在傳統的SpringMVC中,大家使用的都是XML注入,比如:

<!--配置bean,配置后該類由spring管理--> 
<bean name="CategorySericeImpl" class="com.liferunner.service.impl.CategorySericeImpl"> 
<!--注入配置當前類中相應的屬性--> 
<property name="categoryMapper" ref="categoryMapper"></property> 
</bean> 
<bean name="categoryMapper" class="com.liferunner.mapper.CategoryMapper"></bean>

注入之後,使用@Autowired,我們可以很方便的自動從IOC容器中查找屬性,並返回。

@Autowired的原理
在啟動spring IoC時,容器自動裝載了一個AutowiredAnnotationBeanPostProcessor後置處理器,當容器掃描到@Autowied、@Resource或@Inject時,就會在IoC容器自動查找需要的bean,並裝配給該對象的屬性。
注意事項:
在使用@Autowired時,首先在容器中查詢對應類型的bean
如果查詢結果剛好為一個,就將該bean裝配給@Autowired指定的數據
如果查詢的結果不止一個,那麼@Autowired會根據名稱來查找。
如果查詢的結果為空,那麼會拋出異常。解決方法時,使用required=false

上述三種註解方式,其實本質上還是注入的2種:set屬性注入 & 構造器注入,使用方式都可以,根據個人喜好來用,本人喜歡使用lombok插件注入是因為,它將代碼整合在一起,更加符合我們Spring自動注入的規範。

源碼下載

下節預告

下一節我們將繼續開發我們電商的核心部分-商品列表和詳情展示,在過程中使用到的任何開發組件,我都會通過專門的一節來進行介紹的,兄弟們末慌!

gogogo!

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

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

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

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

※試算大陸海運運費!

第 1 份工作,我只幹了 2 周就被辭退了 | 十年系列

1.寫在前面

我將用系列文章,回顧十年程序生涯,一方面是對職場生涯的階段性總結,另一方面希望這些經歷,對讀者往後職場生涯有所啟發。

一隻站在樹上的鳥兒,從來不會害怕樹枝斷裂,因為它相信的不是樹枝,而是它自己的翅膀。

十年系列文章:

2.我的第一份工作

畢業后很多年,我都不好意思和別人提起這件事,第一份工作只上了 2 周班就被辭退了!這是我第一次被人主動辭退,當然也是我職場上的最後一次。

今天回想起來,如果當初沒有被這家公司辭退,我還能成為今天的我嗎?

人生有時候就是這麼神奇。

到底是怎麼回事,我給大家詳細講講。

上篇文章
中講到,從培訓機構培訓完后我找到了一份滿意的工作,也是我從校園出來的第一份工作,我們一個培訓班進了5個人,所以大家租房上班都在一起,每天高高興興的上班下班,我對工作也充滿了信心和期待。

這個香港來的電信公司還不錯,五險一金和其它福利在西安同等公司裏面算好的,最最重要的是這家公司還會給每個入職的同事做一個月的免費培訓,主要的培訓內容就是 Oracle 和 Linux 相關知識。

3.入職培訓

我們那一期總共有18個人入職一起培訓,培訓的地點就在西安軟件園的地下一層,每次早上都是老師先在前面給大家培訓 Sql 的使用,然後再給大家出幾道練習題實踐。

那個時候剛從學校的氛圍裏面出來,完全不知道職場是怎麼回事。我旁邊坐的小夥伴也是和我一樣從培訓班出來的,他就非常的聰明,每次實踐自己做出來之後,就會主動的喊老師過來看一下他的運行結果。

反觀我這邊,有些簡單的或者複雜的實踐題,有的我做出來了有的沒有做出來,做出來之後也不好意思找老師去看,就默默的坐在工位上,整個人感覺都是木木的,缺乏表現。

前排經常有一些同事,只是解出了其中的一些步驟,都會主動的喊老師過來檢查,這樣在老師的幫助下也很快的完成了,多次交流和老師也熟悉了一點。

我自己有時候搞不定,請求隔壁小夥伴的時候,他很聰明直接把電腦屏幕轉個90度,讓老師看到,感覺我就像是抄他的一樣,其實也確實是抄。

而有時候我解出來程序,他沒有做出來的時候,就參考我的內容完成,然後再举手讓老師看他解決了出來,我坐在裏面也沒有給老師反饋,老師可能也覺得我沒有做出來,就這樣過去了。

4.被辭退

兩個星期之後,老師宣布要從18個人裏面淘汰掉 2 個同事,其中就有我。

現在回想起來如果我是那位培訓的老師,我可能也會選擇淘汰掉當時的我,入職之後完全沒有轉變過來學生的身份,仍然像上大學一樣,坐在最後一排默默的干自己的事情。

現在反思當時的自己,應該有以下幾個問題:

  • ① 不积極不主動,這不是學校,這是人家給你錢上班,需要給公司解決問題的。

  • ② 缺乏即時反饋,當你的工作做完之後就應該需要讓你的領導知道。

  • ③ 工作狀態不對,沒有盡全力去學習工作,試用期正是考驗員工的時候呀。

  • ④ 技術能力不行,剛從培訓班出來技術很菜,自己卻不知道。

  • ⑤ 心態轉變太差,還是學生時代的心態,沒有融入到職場。

  • ⑥ 精神面貌不對,在職場不說穿得多好多正式,至少要精神一點,自己當時穿衣確實不像上班的。

基於以上各種我認為的原因,我被開除了!

那次培訓18個人,2個人被辭退,當我把這個信息告訴我姐的時候,我姐說關鍵人家就只淘汰了2個人,其中就有你,我無言以對。

5.又開始重新找工作

從培訓班畢業後身上就沒有多少錢了,入職第一家公司的時候,培訓班的幾個同學都說第一筆工資怎麼怎麼花,有的說要請一家人吃飯,有的說要給女朋友送個禮物,有的說要犒勞一下自己。

我當時什麼話也沒說,因為我的錢誰也給不了,我要留着吃飯交房租。

被辭退後,我就開始一個人在網上瘋狂的投起簡歷來,當時對 IT 行業理解也不深,並不知道什麼是互聯網公司,什麼是傳統軟件公司,什麼是外包公司,但凡只要招聘 Java 工程師的我都投遞了簡歷。

就這樣陸陸續續的收到了幾家公司的面試邀請,我這裏印象比較深刻的有三家公司,因為就這三家公司給了我 Offer。

第一家公司是個小老闆,給 2000 的工資但不給交社保,公司一共也就十幾個人,其中只有5、6個程序員,老闆本身也是程序員出身,主要業務是給別的公司做項目。

第二家公司是深圳易思博,當時華為、中興紛紛在西安創建了研發基地,國內比較著名的外包公司也都紛紛跟了過來,易思博也是當時的外包公司之一。

當時大部分外包都是人力外包,就是別的公司招聘你,你直接去甲方公司上班,但是是乙方公司給你發工資的,當時去華為做人力外包也是需要華為的人來面試的。

第三家公司是一家電信公司,具體是負責中國電信旗下的一個項目,面試官年紀比較大當時和我聊得很不錯,現在還記得他當時主要問我關於 IO 的幾個問題,有些沒有回答好,在他的提示下也都給出了答案。

在這家公司面試的時候非常舒服,就像和一位老大哥在探討技術一樣,就算回答不出來的問題,他也會幫忙給與解釋,讓我學習到了很多。

6.新的選擇

用了差不多兩周的時間,我又重新收穫了 3 份 Offer,其實畢業以來我的面試通過率一般都挺高的,我都覺得自己挺擅長面試的,工資從 1800-2100 差別不是很大。

當時給我姐打了很多電話,讓她幫忙給我參考,但她其實也不太懂這個行業,只是說應該大公司的更保險一點吧。

最終我糾結了3天,選擇了其中一家工資最高的公司,沒想到這又跳入了另外一個坑裡面。具體是掉進什麼樣的坑裡面,下篇再和大家細聊。

7.畢業生如何選擇 Offer

還是想和剛畢業的朋友聊兩句,第一份工作對我們的選擇來講很重要,很有可能決定了你未來職場的發展方向,所以職場選擇的時候我給大家提供幾個建議:

  • 第一:優先選擇大的互聯網公司,也就是我們所說的大廠,大廠有比較完整的培訓體系和成長環境,可以學到中國甚至世界級的系統設計;另外工作兩三年後有大廠經歷,再次出來面試會有加分。

  • 第二:選有潛力的獨角獸公司,比如當初的頭條或者美團都是非常好的選擇,這類公司的發展非常迅速,個人可以跟隨着公司的快速發展一起成長,早期還可以拿到比較多的期權,有可能選擇好一家公司就可以實現財富自由。

  • 第三:選擇傳統軟件公司,比如:神州數碼、中興、華為、用友軟件等公司,傳統軟件公司的技術棧往往相對保守,這是公司的產品性質決定,同時發展速度有限,這些年有些傳統軟件公司也迭代很快,這裏只說大部分傳統軟件公司。華為在這些傳統軟件公司中比較特殊一點,我有幾個朋友也在華為呆了很多年,華為確實給的錢很多,同時工作壓力也非常大,所以需要個人來結合自己情況來選擇。

  • 第四:謹慎選擇小的創業公司,創業公司的死亡率非常高,很多公司到後面都出現了拖欠工資等現象,公司情況完全依賴於老闆的情懷。

最後希望大家避免我的經歷,积極、認真、主動的對待人生第一份工作,迎接好走向社會的第一步,希望讀者們都能找到自己的理想生活。

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

※USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※評比前十大台北網頁設計、台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

※台灣海運大陸貨務運送流程

※兩岸物流進出口一站式服務

亞馬遜粉紅豚 外表夢幻屢遭漁夫獵捕

摘錄自2020年3月5日公視報導

腹部泛著粉紅漂亮膚色的亞馬遜淡水豚,動保專家率領的團隊將牠撈捕上岸,進行檢測、採樣、烙印標記以利追蹤的作業後,再把牠放回大自然。亞馬遜淡水豚是世界上體型最大的淡水豚,成年後體色從深灰轉淡變成粉紅,當牠改變行為或經陽光照射,膚色也會跟著改變,就像人會臉紅一樣。

亞馬遜粉紅豚的孕育期長達13個月,河豚寶寶出生後,有兩年時間需要母親照顧,由於哺育期比較長,母河豚每隔三到五年才會生育,加上每年約有2500隻粉紅豚遭到漁夫獵殺,做為獵捕另一種大型鯰魚的誘餌,這種淡水豚已經列入易危名單。當地檢方在2015年提出禁捕鯰魚的禁令,希望保護粉紅豚,不過禁漁令上個月到期,動保專家疾呼應該展延。

動保專家擔心,如果不趕快採取有效行動,亞馬遜粉紅豚恐怕會重演長江白鱀豚於2006年滅絕的悲劇。

物種保育
海洋
生態保育
國際新聞
亞馬遜

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

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

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

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

※試算大陸海運運費!

找尋霧霾源頭 南韓衛星「千里眼2B」成功進入預定軌道

摘錄自2020年3月8日自由時報報導

南韓政府今日(8日)表示,自製環境衛星「千里眼2B」(GEO-KOMPSAT-2B)於2月發射升空後,於本月6日成功進入預定的地球靜止軌道。

千里眼2B主要功用是在觀測東亞地區霧霾、赤潮等環境及海洋數據。2011年起由南韓航空宇宙研究院、南韓海洋科學技術院、南韓航太產業、BAE Systems、空中巴士等參與研發。

報導指出,千里眼2B將在4月起調整各項系統,如果順利,預計將在今年10月開始執行收集海洋資訊的任務,並於2021年起執行監測大氣環境的任務。千里眼2B可覆蓋從日本到印尼北部及蒙古南部的廣大地區,有望為東北亞空污源頭研究提供證據。

空氣污染
公害污染
國際新聞
南韓
霧霾
人造衛星

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※評比前十大台北網頁設計、台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

※台灣海運大陸貨務運送流程

※兩岸物流進出口一站式服務

德國SMA推出新型儲能2.5逆變器「陽光男孩」

德國太陽能逆變器巨頭SMA推出其新型「陽光男孩」儲能2.5(Sunny Boy Storage 2.5)逆變器,可與特斯拉的Powerwall系統結合,將「陽光男孩」蓄電成本減半。

SMA表示,這款新型逆變器 Sunny Boy Storage 2.5將於5月份投入德國市場,而歐洲和澳大利亞推出時間更晚一些。

此高壓蓄電裝置是一個AC耦合定制串式逆變器,可讓電池與標準的太陽能串式逆變器相連,也可以和家庭和電網相連。「陽光男孩」儲能2.5容量為7kWh,通過德國批發商進行銷售。SMA表示,到今年中期,其他廠商的高壓電池將與SMA的電力解決方案相結合。

該SMA設備單相運行,最大放電功率為2.5kW。可以並聯,可以與Sunny Home Manager的能量管理共同協調,並且可以在戶外安裝。

相比於SMA現有的交流耦合儲能產品「陽光冰島」(Sunny Island)的價格,「陽光男孩」儲能2.5的售價低了56%。因為「陽光冰島」有些必備的部件對於儲能2.5而言根本不需要。根據「陽光冰島」目前網上商店的價格,「陽光男孩」儲能2.5售價不會超過1,000歐元,這對於儲能系統而言並不算貴。

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

【其他文章推薦】

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

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

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

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

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

※試算大陸海運運費!

北汽比亞迪東風將應用樂視車聯網系統ecolink

昨(16)日,樂視車聯與北汽新能源、比亞迪及東風風神三家車企簽訂了合作協定,三家車企都將在部分車型上配備樂視車聯網系統ecolink。

ecolink是樂視研發的車聯網系統,包括儀錶盤、汽車中控面板、後排娛樂系統等手機車機互聯設備,以及樂視提供的線上應用商店。

樂視車聯首席技術官饒宏表示,樂視的車聯網系統以乙太網為主要介面,同時支援iOS和android雙平臺的智慧手機接入。同時,該系統將使用語音辨識的方式進行操作,避免開車時操作手機帶來風險。

此次簽訂合作協定的三家車企中,北汽是最早開始與樂視合作的。2015年3月,北汽與樂視控股在香港正式簽訂戰略合作協定,2015年上海車展上 ,北汽展示了配備樂視車聯網系統的概念車。

比亞迪與樂視車聯同時簽訂的還有ecolink的合作落地協議,樂視車連戰略合作總監李聰表示,具體的合作內容將在4月份的北京車展有所展示。

當日與樂視簽訂合作協定的還有三家車載設備廠商,分別是航盛電子、華陽電子,以及德賽西威。

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

【其他文章推薦】

※USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※評比前十大台北網頁設計、台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

※台灣海運大陸貨務運送流程

※兩岸物流進出口一站式服務

etcd-operator快速入門完全教程

Operator是指一類基於Kubernetes自定義資源對象(CRD)和控制器(Controller)的雲原生拓展服務,其中CRD定義了每個operator所創建和管理的自定義資源對象,Controller則包含了管理這些對象所相關的運維邏輯代碼。

對於普通用戶來說,如果要在k8s集群中部署一個高可用的etcd集群,那麼不僅要了解其相關的配置,同時又需要特定的etcd專業知識才能完成維護仲裁,重新配置集群成員,創建備份,處理災難恢復等等繁瑣的事件。

而在operator這一類拓展服務的協助下,我們就可以使用簡單易懂的YAML文件(同理參考Deployment)來聲明式的配置,創建和管理我們的etcd集群,下面我們就來一同了解下etcd-operator這個服務的架構以及它所包含的一些功能。

目 標

  1. 了解etcd-operator的架構與CRD資源對象

  2. 部署etcd-operator

  3. 使用etcd-operator創建etcd cluster

  4. 基於etcd-operator備份和恢復etcd cluster

服務架構

etcd-operator的設計是基於k8s的API Extension機制來進行拓展的,它為用戶設計了一個類似於Deployment的Controller,只不過這個Controller是用來專門管理etcd這一服務的。

用戶默認還是通過kubectl或UI來與k8s的API進行交互,只不過在這個k8s集群中多了一個用戶自定義的控制器(custom controller),operator controller的服務是以Pod的方式運行在k8s集群中的,同時這個服務也需要配置所需的RBAC權限(比如對Pod,Deployment,Volume等使用到的資源進行增刪改查的操作),下面我們用一個簡單的架構圖來進行闡述:

etcd-operator的自定義資源對象(CRD)

在k8s中,所有自定義的Controller和其自定義的資源對象(CRD)都必須滿足k8s API的規範(參考下圖):

  • apiVersion描述了當前自定義資源對象的版本號

  • Kind表示自定義資源對象的名稱,用戶可通過執行kubectl get $KIND_NAME來獲取所創建的CRD對象

  • Metadata繼承了原生k8s的metadata,用於添加標籤,Annotations等元數據

  • Spec是用戶可自定義設計的服務配置參數,如鏡像版本號,節點數量,資源配置等等..

  • Status包含了當前資源的的相關狀態,每個operator controller可自定義status所包含的信息,一般會選擇添加如conditions,updateTime和message等一類的信息。

下面先我們來了解一下etcd-operator所包含的幾個自定義資源對象(CRDs):

1、EtcdCluster: etcdcluster用來描述用戶自定義的etcd集群,可一鍵式部署和配置一個相關的etcd集群。

apiVersion: etcd.database.coreos.com/v1beta2
kind: EtcdCluster
metadata:
  name: etcd-cluster
spec:
  size: 3
  version: 3.2.25

2、EtcdBackup: etcdbackup用來描述和管理一個etcd集群的備份,當前支持定期備份到雲端存儲,如AWS s3, Aliyun oss(oss當前需使用quay.io/coreos/etcd-operator:dev鏡像)。


apiVersion: etcd.database.coreos.com/v1beta2
kind: EtcdBackup
metadata:
  name: etcd-backup
spec:
  etcdEndpoints: [<etcd-cluster-endpoints>]
  storageType: OSS #options are S3/ABS/GCS/OSS
  backupPolicy:
    backupIntervalInSecond: 125
    maxBackups: 4
  oss:
    #"<oss-bucket-name>/<path-to-backup-file>"
    path: <full-oss-path>
    ossSecret: <oss-secret>
    # Details about regions and endpoints, see https://www.alibabacloud.com/help/doc-detail/31837.htm
    endpoint: <endpoint> 

3、EtcdRestore:etcdrestore用來幫助將etcdbackup服務所創建的備份恢復到一個指定的etcd的集群。

apiVersion: etcd.database.coreos.com/v1beta2
kind: EtcdRestore
metadata:
  # name must be same to the spec.etcdCluster.name
  name: example-etcd-cluster
spec:
  etcdCluster:
    name: example-etcd-cluster
  backupStorageType: OSS
  oss:
    path: <full-oss-path> 
    ossSecret: <oss-secret>
    endpoint: <endpoint>

如何部署和使用etcd-operator

1、部署etcd-operator

在Rancher最新的stable v2.3.2 的版本中,用戶可通過應用商店(Catalog)來一鍵式部署 etcd-operator v0.9.0版本,同時原生k8s也可下載rancher/charts到本地后通過helm install的方式進行部署。

1)(可選)部署etcd-operator時可選擇同時創建一個etcd集群(此集群在etcd-operator被刪除時會被一同移除),當然用戶也可待etcd-operator部署完成通過kubectl apply -f myetcd.yaml來創建一個新的etcd集群。

2)部署時,如果用戶選擇啟動Enable Clusterwide of etcd Operator這個選項,那麼這個etcd-operator將作為集群層級對象來使用(否則為namespaced隔離),如果enable這個選項,那麼在創建etcd集群時需添加以下註釋才能創建創建:

kind: EtcdCluster
metadata:
  name: etcd-cluster
  # add this annotation when the clusterWide is enabled
  annotations:
    etcd.database.coreos.com/scope: clusterwide

2、創建etcd集群

接下來我們就可以使用上述的CRD自定義資源對象對來創建和管理我們的etcd集群了。

2.1 手動創建etcd集群

cat <<EOF | kubectl apply -f -
apiVersion: etcd.database.coreos.com/v1beta2
kind: EtcdCluster
metadata:
  name: "etcd-cluster"
spec:
  size: 3 # 默認etcd節點數
  version: "3.2.25" # etcd版本號
EOF

2.2 部署后可通過CRD對象來查看我們創建的etcd集群和pod狀態

$ kubectl get etcdcluster
NAME            AGE
etcd-cluster    2m

$ kubectl get pod
NAME                     READY   STATUS  RESTARTS AGE
etcd-cluster-g28f552vvx  1/1   Running    0      2m
etcd-cluster-lpftgqngl8  1/1   Running    0      2m
etcd-cluster-sdpcfrtv99  1/1   Running    0      2m

2.3 可以往etcd集群任意的寫入幾條數據驗證etcd集群是正常工作的(後續也可用來驗證集群的備份和恢復功能)

$ kubectl get svc
NAME                  TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)             AGE
etcd-cluster          ClusterIP   None           <none>        2379/TCP,2380/TCP   17h
etcd-cluster-client   ClusterIP   10.43.130.71   <none>        2379/TCP            17h
## write data
$ kubectl exec -it any-etcd-pod -- env "ETCDCTL_API=3" etcdctl --endpoints http://etcd-cluster-client:2379 put foo "Hello World"
## get data
$ kubectl exec -it any-etcd-pod -- env "ETCDCTL_API=3" etcdctl --endpoints http://etcd-cluster-client:2379 get foo
foo
Hello World

3、基於operator備份etcd cluster

3.1 確認了etcd集群正常運行后,作為devops後面要考慮的就是如何創建etcd集群的自動化備份,下面以阿里雲的OSS舉例:

cat <<EOF | kubectl apply -f -
apiVersion: etcd.database.coreos.com/v1beta2
kind: EtcdBackup
metadata:
  name: example-etcd-cluster-periodic-backup
spec:
  etcdEndpoints: [http://etcd-cluster-client:2379] #內網可使用svc地址,外網可用NodePort或LB代理地址
  storageType: OSS
  backupPolicy:
    backupIntervalInSecond: 120 #備份時間間隔
    maxBackups: 4 #最大備份數
  oss:
    path: my-bucket/etcd.backup
    ossSecret: oss-secret #需預先創建oss secret
    endpoint: oss-cn-hangzhou.aliyuncs.com
EOF

3.2 若OSS Secret不存在,用戶可先手動創建,具體配置可參考如下:

cat << EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
  name: oss-secret
type: Opaque
stringData:
  accessKeyID: myAccessKey
  accessKeySecret: mySecret
EOF

3.3 待etcdbackup創建成功后,用戶可以通過kubectl describe etcdbackup或查看etcd-backup controller日誌來查看備份狀態,如狀態显示為Succeeded: true,可以前往oss查看具體的備份內容。

4、基於operator恢復etcd cluster

最後,假設我們要將etcd集群A的備份數據恢復到另一個新的etcd集群B,那麼我們先手動創建一個名為etcd-cluster2的新集群(oss備份/恢復當前需使用quay.io/coreos/etcd-operator:dev鏡像)。

cat <<EOF | kubectl apply -f -
apiVersion: etcd.database.coreos.com/v1beta2
kind: EtcdCluster
metadata:
  name: "etcd-cluster2"
spec:
  size: 3
  version: "3.2.25"
EOF

然後通過創建etcdresotre將備份數據恢復到etcd-cluster2集群


cat <<EOF | kubectl apply -f -
apiVersion: etcd.database.coreos.com/v1beta2
kind: EtcdRestore
metadata:
  # name必須與下面的spec.etcdCluster.name保持一致
  name: etcd-cluster2
spec:
  etcdCluster:
    name: etcd-cluster2
  backupStorageType: OSS
  oss:
    path: my-bucket/etcd.backup_v1_2019-08-07-06:44:17
    ossSecret: oss-secret
    endpoint: oss-cn-hangzhou.aliyuncs.com
EOF

待etcdresotre對象創建成功后,可以查看etcd-operator-restore的日誌,大致內容如下:

$ kubectl logs -f etcd-operator-restore
...
time="2019-08-07T06:50:26Z" level=info msg="listening on 0.0.0.0:19999"
time="2019-08-07T06:50:26Z" level=info msg="starting restore controller" pkg=controller
time="2019-08-07T06:56:25Z" level=info msg="serving backup for restore CR etcd-cluster2"

通過kubectl查看pod我們可以看到etcd-cluster2集群的etcd節點被刪除重建:

NAME                       READY   STATUS    RESTARTS   AGE
etcd-cluster2-5tq2d5bvpf    0/1     Terminating   0      93s
etcd-cluster2-kfgvc692pp    1/1     Terminating   0      101s
etcd-cluster2-xqkgz8chb8    0/1     Init:1/3      0      6s
etcd-cluster2-pf2qxgtg9d    1/1     Running       0      48s
etcd-cluster2-x92l9vpx97    1/1     Running       0      40s

最後可通過etcdctl來驗證之前的數據是否存在(需設置ETCDCTL_API=3):

$ kubectl exec -it etcd-pod -- env "ETCDCTL_API=3" etcdctl --endpoints http://etcd-cluster2-client:2379 get foo
foo
Hello World

小 結

Etcd作為當前非常流行的key-value分佈式文件存儲,它本身的強一致性和較優的性能可以為許多分佈式計算解決分佈式存儲的需求,如果你的微服務和應用需要用到此類的數據庫,不妨來試試Rancher Catalog應用中的etcd-operator吧,Just do it!

相關資料:

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

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

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

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

※試算大陸海運運費!

019.Kubernetes二進制部署插件dashboard

一 修改配置文件

1.1 下載解壓

  1 [root@k8smaster01 ~]# cd /opt/k8s/work/kubernetes/
  2 [root@k8smaster01 kubernetes]# tar -xzvf kubernetes-src.tar.gz



提示:k8smaster01節點已解壓完畢,可直接修改配置。

1.2 修改配置

  1 [root@k8smaster01 ~]# cd /opt/k8s/work/kubernetes/cluster/addons/dashboard
  2 [root@k8smaster01 dashboard]# vi dashboard-service.yaml
  3 ……
  4   type: NodePort			#增加此行,使用node形式訪問
  5 ……
  6 #使用node方式訪問dashboard

1.3 修改為國內源


  1 [root@k8smaster01 dashboard]# vi dashboard-controller.yaml
  2 ……
  3         image: mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1
  4 ……



提示:將yaml文件中的image字段修改為mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1。

二 創建 dashboard

2.1 創建dashboard並檢查

  1 [root@k8smaster01 ~]# cd /opt/k8s/work/kubernetes/cluster/addons/dashboard
  2 [root@k8smaster01 dashboard]# kubectl apply -f .


2.2 查看分配的NodePort

  1 [root@k8smaster01 ~]# kubectl get deployment kubernetes-dashboard -n kube-system
  2 NAME                  READY    UP-TO-DATE    AVAILABLE    AGE
  3 kubernetes-dashboard  1/1      1             1            84s
  4 [root@k8smaster01 ~]# kubectl --namespace kube-system get pods -o wide
  5 [root@k8smaster01 ~]# kubectl get services kubernetes-dashboard -n kube-system





提示:k8smaster02 NodePort 31181 映射到 dashboard pod 443 端口。

2.3 查看dashboard參數

  1 [root@k8smaster01 ~]# kubectl exec --namespace kube-system -it kubernetes-dashboard-7848d45466-bgz94  -- /dashboard --help


提示:dashboard 的 –authentication-mode 支持 token、basic,默認為 token。如果使用 basic,則 kube-apiserver 必須配置 –authorization-mode=ABAC 和 –basic-auth-file 參數。

三 dashboard驗證方式


由於Kubernetes默認證書可能過期導致無法訪問dashboard,本實驗在已成功部署Kubernetes後手動重新創建證書。

3.1 創建證書

  1 [root@k8smaster01 ~]# cd /opt/k8s/work/
  2 [root@k8smaster01 work]# openssl genrsa -out dashboard.key 2048
  3 [root@k8smaster01 work]# openssl rsa -passin pass:x -in dashboard.key -out dashboard.key
  4 [root@k8smaster01 work]# openssl req -new -key dashboard.key -out dashboard.csr
  5 -----
  6 Country Name (2 letter code) [XX]:CN
  7 State or Province Name (full name) []:Shanghai
  8 Locality Name (eg, city) [Default City]:Shanghai
  9 Organization Name (eg, company) [Default Company Ltd]:k8s
 10 Organizational Unit Name (eg, section) []:System
 11 [root@k8smaster01 work]# openssl x509 -req -sha256 -days 365 -in dashboard.csr -signkey dashboard.key -out dashboard.crt
 12 [root@k8smaster01 work]# openssl x509  -noout -text -in ./dashboard.crt		#查看證書


3.2 分發證書

  1 [root@k8smaster01 ~]# cd /opt/k8s/work
  2 [root@k8smaster01 work]# source /opt/k8s/bin/environment.sh
  3 [root@k8smaster01 work]# for all_ip in ${ALL_IPS[@]}
  4   do
  5     echo ">>> ${all_ip}"
  6     scp dashboard.* root@${all_ip}:/etc/kubernetes/cert
  7   done


3.3 修改默認證書配置

  1 [root@k8smaster01 work]# cd /opt/k8s/work/kubernetes/cluster/addons/dashboard
  2 [root@k8smaster01 dashboard]# kubectl delete -f .		#刪除使用默認證書所創建的dashboard
  3 [root@k8smaster01 dashboard]# ll /etc/kubernetes/cert/dashboard.*
  4 -rw-r--r-- 1 root root 1.2K Jun 28 18:06 /etc/kubernetes/cert/dashboard.crt
  5 -rw-r--r-- 1 root root  976 Jun 28 18:06 /etc/kubernetes/cert/dashboard.csr
  6 -rw-r--r-- 1 root root 1.7K Jun 28 18:06 /etc/kubernetes/cert/dashboard.key
  7 
  8 [root@master dashboard]# kubectl create secret generic kubernetes-dashboard-certs --from-file="/etc/kubernetes/cert/dashboard.crt,/etc/kubernetes/cert/dashboard.key" -n kube-system	#掛載新證書到dashboard
  9 [root@master dashboard]# kubectl get secret kubernetes-dashboard-certs -n kube-system -o yaml	#查看新證書


3.4 重新部署dashboard

  1 [root@k8smaster01 work]# cd /opt/k8s/work/kubernetes/cluster/addons/dashboard
  2 [root@master dashboard]# kubectl apply -f .
  3 [root@master dashboard]# kubectl get pods --namespace=kube-system | grep dashboard		#確認驗證


3.5 確認驗證

  1 [root@k8smaster01 ~]# kubectl get deployment kubernetes-dashboard -n kube-system
  2 [root@k8smaster01 ~]# kubectl --namespace kube-system get pods -o wide
  3 [root@k8smaster01 ~]# kubectl get services kubernetes-dashboard -n kube-system





提示:k8smaster03 NodePort 30938 映射到 dashboard pod 443 端口。

四 訪問dashboard

3.1 導入證書


將dashboard.crt導入IE瀏覽器,並設置為信任,導入操作略。

3.2 訪問方式


本實驗採用nodeip:nodepord方式訪問。

瀏覽器訪問:https://172.24.8.73:30938



提示:

更多dashboard訪問方式及認證可參考《附004.Kubernetes Dashboard簡介及使用》。

dashboard登錄整個流程可參考:https://www.cnadn.net/post/2613.htm

apiserver方式見3.4,Kubeconfig驗證方式見《附006.Kubernetes身份認證》中的3.5。

五 驗證方式

5.1 創建token

  1 [root@k8smaster01 ~]# kubectl create sa dashboard-admin -n kube-system
  2 [root@k8smaster01 ~]# kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
  3 [root@k8smaster01 ~]# ADMIN_SECRET=$(kubectl get secrets -n kube-system | grep dashboard-admin | awk '{print $1}')
  4 [root@k8smaster01 ~]# DASHBOARD_LOGIN_TOKEN=$(kubectl describe secret -n kube-system ${ADMIN_SECRET} | grep -E '^token' | awk '{print $2}')
  5 [root@k8smaster01 ~]# echo ${DASHBOARD_LOGIN_TOKEN}	#輸入登錄的token
  6 eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tdmc5bWgiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZTlkNGRjNGUtOTk3OC0xMWU5LTkzNTItMDAwYzI5ZmE3YTc5Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.X1NJsPNaAgV2TzJo0NlqOWFofDYOsSdkeiYHFGQFk5nNy0nbbnfnnoH0yumj_Ld0nGPakIjEpsUq9dqgCazeCpgk5EsygD6UlSg5sYA2sTLswbDoZdS3QzrOjY5MXWD3VDc_OQofD94MZqHMMw7IABVlfVsZ0vMEvHe-Qtyt6EQlFlHq5QjwDX8dCQDKRbwuiCr-Iy_dCWHHIhaT25BREf2viei8sZ497D8h4TXgO_u2CGf3qXRGNXj26VSdD8bT-BFGiDdyuXPbDHPU5LalvxF4WThChRfjO4zHLI2fOXq8BBF6DjbjhtG4X8fLuvJaxF4YWAmVS_78eJHhA3nvRg


3.4 創建kubeconfig文件


使用token相對複雜,可將token添加至kubeconfig文件中,使用KubeConfig 文件訪問dashboard。

  1 [root@k8smaster01 ~]# cd /opt/k8s/work/
  2 [root@k8smaster01 work]# source /opt/k8s/bin/environment.sh
  3 [root@k8smaster01 work]# kubectl config set-cluster kubernetes \
  4   --certificate-authority=/etc/kubernetes/cert/ca.pem \
  5   --embed-certs=true \
  6   --server=${KUBE_APISERVER} \
  7   --kubeconfig=dashboard.kubeconfig		# 設置集群參數
  8 [root@k8smaster01 work]# kubectl config set-credentials dashboard_user \
  9   --token=${DASHBOARD_LOGIN_TOKEN} \
 10   --kubeconfig=dashboard.kubeconfig		# 設置客戶端認證參數,使用上面創建的 Token
 11 [root@k8smaster01 work]# kubectl config set-context default \
 12   --cluster=kubernetes \
 13   --user=dashboard_user \
 14   --kubeconfig=dashboard.kubeconfig		# 設置上下文參數
 15 [root@k8smaster01 work]# kubectl config use-context default --kubeconfig=dashboard.kubeconfig			# 設置默認上下文,將dashboard.kubeconfig文件導入,以便於瀏覽器使用該文件登錄。


六 正式登錄

6.1 kubeconfig訪問


瀏覽器訪問:https://172.24.8.73:30938








提示:由於缺少 Heapster 插件,當前 dashboard 不能展示 Pod、Nodes 的 CPU、內存等統計數據和圖表。本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

※USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※評比前十大台北網頁設計、台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

※台灣海運大陸貨務運送流程

※兩岸物流進出口一站式服務

圈養鯨豚退休後的家 世界第一個鯨魚安養中心 選在加拿大天然海灣

環境資訊中心綜合外電;姜唯 編譯;林大利 審校

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

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

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

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

※試算大陸海運運費!