I have to convert a large Spring boot application into a flexible CLI tool, where the requests sent by the Spring boot application (among other things) are determined by user input at the command line. I decided to use picocli to implement the command line functionality, however I can't figure out how to even do something as simple as print some text to stdout if the user passes a given option flag, Spring boot just runs as it normally does. How am I supposed to write this so picocli can function alongside Spring boot (and eventually control all the Spring boot stuff)
Getting Picocli to work with Springboot application
4.3k Views Asked by Guilty At
2
There are 2 best solutions below
0
Galen Howlett
On
Spring Boot is supported by PicoCLI and they even have an example to follow: https://picocli.info/#_spring_boot_example
Related Questions in JAVA
- I need the BIRT.war that is compatible with Java 17 and Tomcat 10
- Creating global Class holder
- No method found for class java.lang.String in Kafka
- Issue edit a jtable with a pictures
- getting error when trying to launch kotlin jar file that use supabase "java.lang.NoClassDefFoundError"
- Does the && (logical AND) operator have a higher precedence than || (logical OR) operator in Java?
- Mixed color rendering in a JTable
- HTTPS configuration in Spring Boot, server returning timeout
- How to use Layout to create textfields which dont increase in size?
- Function for making the code wait in javafx
- How to create beans of the same class for multiple template parameters in Spring
- How could you print a specific String from an array with the values of an array from a double array on the same line, using iteration to print all?
- org.telegram.telegrambots.meta.exceptions.TelegramApiException: Bot token and username can't be empty
- Accessing Secret Variables in Classic Pipelines through Java app in Azure DevOps
- Postgres && statement Error in Mybatis Mapper?
Related Questions in SPRING
- HTTPS configuration in Spring Boot, server returning timeout
- Multi Tenancy in Spring - Partitioned Data Approach
- How to create beans of the same class for multiple template parameters in Spring
- org.telegram.telegrambots.meta.exceptions.TelegramApiException: Bot token and username can't be empty
- Springboot: How to get an entity optional property and check null?
- How do I propagate the current SecurityContext to my @RabbitListener in Spring Boot?
- Spring's XML based bean configuration for Object Mapper's Case Insensitive property
- Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. I'm using Postgresql
- springboot class org.hibernate.mapping.Bag cannot be cast to class org.hibernate.mapping.SimpleValue
- Issue while deploying JDK 17 and Spring 6 application in Tomcat 10.1.20
- Spring JPA Data Auditing - How to design it?
- Springframework test: Async not started
- Error: Cannot invoke "jakarta.servlet.http.HttpSession.getAttribute(String)" because "session" is null
- How does spring-retry determine which methods to retry when @Retryable is placed at the class level?
- problem with edge server registration in Eureka
Related Questions in SPRING-BOOT
- Multi Tenancy in Spring - Partitioned Data Approach
- I have created a spring boot application with spring data JPA, Rest ,oracle and i am getting this ORA-00933: SQL command not properly ended
- Springboot: How to get an entity optional property and check null?
- How to create jasper report in spring boot rest api with jpa
- JSON Body is Not Passing Certain Strings
- Unresolved reference error is showing up after adding the dgs codegen plugin successfully
- Transaction silently rolled back
- JPA buddy error when generating JPA Entities from DB
- Migrating Spring Boot 2 to 3 throws org.glassfish.jaxb.runtime.v2.runtime.IllegalAnnotationsException: 3 counts of IllegalAnnotationExceptions
- Hibernate SQL Error: Missing FROM-clause entry for table "th1_1"
- Appwrite and / or Spring Boot Backend
- Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. I'm using Postgresql
- Driver com.microsoft.sqlserver.jdbc.SQLServerDriver claims to not accept jdbcUrl, ${SPRING_DATASOURCE_URL}: GitHub Actions
- springboot class org.hibernate.mapping.Bag cannot be cast to class org.hibernate.mapping.SimpleValue
- Spring security causing 404 with message "No static resource login"
Related Questions in MAVEN
- Accessing Secret Variables in Classic Pipelines through Java app in Azure DevOps
- JavaFX build generating a blank gui with primary view and secondary view buttons
- Maven (Java) does not build dependencies into a compiled file
- java.lang.ClassNotFoundException: javax.servlet.jsp.tagext.TagLibraryValidator in Spring-boot jsp application
- I am trying to use h2 in-memory db from my spring boot application, my spring boot version is 3.1.10, but its not connecting to h2 properly
- BeanCreationException when deploying Spring Boot app
- How to run Parallel tests by groups using Maven and TestNG?
- Get control flow information with JaCoCo
- Failed to instantiate [com.docusign.esign.client.ApiClient]
- Gradle - Groovy vs Gradle - Kotlin vs Maven for Java Spring Boot web application project on IntelliJ
- Intelij ultimate and spring boot giving me errors
- Using Eclipse Maven project, import new version of a class from a jar file created from another Maven project
- Messing up with conflict between spring jcl and commons-logging.jar
- Run java program
- How to add a Maven project to an Ubuntu image in Docker
Related Questions in PICOCLI
- Exception Handling in a groovy script annotated with @PicocliScript2
- Running picocli from Windows command-line, not presenting subcommand output
- Circular initialization dependency with picocli, typesafe config and Guice
- How to print picocli usage before every execution
- Attribute 'requiredOptionMarker' should have type 'java.lang.Character'; but found type 'java.lang.String'
- "Missing Required Options" warning message not displayed for missing options
- Packaged a Java Application using Jpackage for ubuntu type deb. But giving error when type command (command not found)
- PicoCLI ignoring dollar sign in a given string
- Picocli with long running Javalin Thread
- Error: Path entry 'axis.jar' does not map to a real path. Error: Image build request failed with exit status 1
- How to get PicoCLI to interpret next item as flag and not string
- PicoCLI "defaultValue" and option values for primitive arrays
- How can I create a multiple choice prompt in picocli?
- Does Picocli support tar style argument simplification? E.g. 'tar -tvf file' vs 'tar tvf file'
- Picocli: is it possible to calculate Option default value with help of some other Autowired field?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
As a follow-up to this I eventually got the code working by refactoring out the "controller methods" into 3 as follows:
|
|_
MainApp.java|_
CmdRunner.java|_
TheCommand.javaWhere MainApp is the
@SpringBootApplicationwhich basically just does:Kicking everything off.
CmdRunner is an
@Component& simple implementation of theCommandLineRunnerInterface provided by SpringBoot, the most important bit is below:It executes the passed cli arguments (which were passed to it from MainApp.java) on a new picocli
CommandLineobject. Which brings us to the final class,TheCommand.javawhich is simultaneously a picocli@Command& Springboot@Controllerimplementing theRunnableinterface. And essentially just contains all the logic and (ever-growing)functionality I needed to deliver.The only downside of this implementation is that when a user runs it with the
--helpflag, the app still runs the spring boot stuff making it a little unresponsive in that particular scenario.