私はSpringベースのSpring MVCアプリケーションをFirebaseに接続しようとしています。Firebase ServiceAccount jsonリソースをSpring MVCで正しく読み込む方法は?
問題がリソースをロードする方法、APIキーJSONファイルを配置する場所を私は知らないということで、メソッド呼び出しの正しい順序:私のアプリケーションのフォルダ構造は次のようになります。
リソースを次のようにロードしようとしました。これまで、ClassLoaderを使用してWEB-INFフォルダからロードしようとしましたが、コードが変更され、InputStreamのNullPointer Exception(なぜFileNotFound Exceptionですか?)を受け取り、以前の状態を復元できませんでした。
「Spring MVCの読み込みリソース」がどれくらいあってもリソースを読み込めないため、FileNotFound例外を受け取ります。サービスアカウントの「init」メソッドを使用してデバッガをチェックしたところ、 @PostConstructがサーバーの起動時に実行されていません。
私はリソースを読み込み、 "init"メソッドを呼び出して動作させることができるはずであることを理解しています。 (私は、Beanを作成した後、そしてfirebaseメソッドを使う前に一度呼び出すだけで十分だと思います)しかし、私は実際の実装を思いつくことができませんでした。
は、私はここからの例を使用: https://github.com/savicprvoslav/Spring-Boot-starter (ページの下)
私のコントローラクラス:
@Controller
@RequestMapping("/firebase")
public class FirebaseController {
@Autowired
private FirebaseService firebaseService;
@GetMapping(value="/upload/maincategories")
public void uploadMainRecordCategories() {
firebaseService.uploadMainRecordCategories();
}
私のサービスクラス:
@Service
public class FirebaseServiceBean implements FirebaseService {
@Value("/api.json")
Resource apiKey;
@Override
public void uploadMainRecordCategories() {
// do something
}
@PostConstruct
public void init() {
try (InputStream serviceAccount = apiKey.getInputStream()) {
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.setDatabaseUrl(FirebaseStringValue.DB_URL).build();
FirebaseApp.initializeApp(options);
} catch (IOException e) {
e.printStackTrace();
}
}
}